spanish name month mes from ejemplos php sql mysql phrase

php - name - ¿Cómo obtengo el mes a partir de la fecha en mysql?



mysql get month name from date (7)

Quiero poder obtener resultados de mysql con una declaración como esta:

SELECT * FROM table WHERE amount > 1000

Pero quiero obtener el resultado restringido a un determinado mes y año (según la información del usuario) ... Lo intenté así:

SELECT * FROM table WHERE amount > 1000 AND dateStart = MONTH(''$m'')

... $m siendo un mes pero dio error.

En esa tabla, en realidad tiene dos fechas: startDate y endDate pero me estoy enfocando en startDate . Los valores de entrada serían mes y año. ¿Cómo formulo la declaración SQL que obtiene los resultados en función de ese mes de ese año?


Intente esto si (el campo de fecha es texto y luego convierta esta cadena en fecha):

SELECT * FROM `table_name` WHERE MONTH(STR_TO_DATE(date,''%d/%m/%Y''))=''11'' //This will give month number MONTH(STR_TO_DATE(date,''%d/%m/%Y'')) //If its return 11 then its November // Change date format with your date string format %d/%m/%Y


P.ej

$date = sprintf("''%04d-%02d-01''", $year, $month); $query = " SELECT x,y,dateStart FROM tablename WHERE AND amount > 1000 AND dateStart >= $date AND dateStart < $date+Interval 1 month "; mysql_query($query, ...

Esto creará una consulta como por ejemplo

WHERE AND amount > 1000 AND dateStart >= ''2010-01-01'' AND dateStart < ''2010-01-01''+Interval 1 month

+ Interval 1 month es una alternativa a date_add() .

SELECT Date(''2010-01-01''+Interval 1 month) -> 2010-02-01
SELECT Date(''2010-12-01''+Interval 1 month) -> 2011-01-01
De esta manera siempre obtendrá el primer día del mes siguiente. Los registros que desea deben tener una fecha de inicio antes de esa fecha pero después / igual al primer día del mes (y año) que ha pasado a sprintf ().
''2010-01-01''+Interval 1 month no cambia entre filas. MySQL calculará el término solo una vez y puede utilizar índices para la búsqueda.


Prueba esto

SELECT * FROM table WHERE amount > 1000 AND MONTH(datestart) GROUP BY EXTRACT(YEAR_MONTH FROM datestart)


Prueba esto:

SELECT * FROM table WHERE amount > 1000 AND MONTH(dateStart) = MONTH(''$m'') AND YEAR(dateStart) = YEAR(''$m'')


Trabaja en: MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23

  • Día:

    SELECT EXTRACT(DAY FROM "2017-06-15");

  • Mes:

    SELECT EXTRACT(MONTH FROM "2017-06-15");

  • Año:

    SELECT EXTRACT(YEAR FROM "2017-06-15");


Utilice la función month() .

select month(now());


startDate cerca - obtuvo la comparación al revés (asumiendo que startDate es un tipo de datos DATETIME o TIMESTAMP):

SELECT * FROM table WHERE amount > 1000 AND MONTH(dateStart) = {$m}

Advertencias:

Alternativas:

Debido a que el uso de funciones en columnas no puede usar índices, un mejor enfoque sería usar BETWEEN y las funciones STR_TO_DATE :

WHERE startdate BETWEEN STR_TO_DATE([start_date], [format]) AND STR_TO_DATE([end_date], [format])

Consulte la documentación para formatear la sintaxis.

Referencia: