2012-02-08 13 views
9

Guardo las fechas en mi base de datos en una columna del tipo de datos date.

Digamos que tengo la columna date donde almaceno los datos como este "2011-01-01", "2012-01-01", "2012-02-02", etc.

Ahora tengo que hacer SQL que selecciona sólo las filas donde date es igual a 2012

SELECT * FROM table WHERE date=hasSomehowYearEqualTo=2012

¿Cuál sería la consulta como?

Respuesta

15

Do NO uso - esto calculará para todas las fechas, incluso para aquellos, que nunca usa. También hará uso de un índice imposible - el peor caso en la capa de DB.

Uso

$sql="SELECT * FROM table WHERE `date` BETWEEN '$year-01-01' AND '$year-12-31'" 

Como regla general: Si usted tiene la posibilidad de elegir entre un cálculo sobre una constante y un cálculo en un campo, utilice el primero.

+0

gran punto acerca de los cálculos. También puede hacer 'WHERE \' date \ 'LIKE '$ year -%''. – ceejayoz

+3

@ceejayoz ¡Esto es igual de malo! crea la representación de cadena para todas las fechas, sin índice utilizado ... si puede elegir entre un cálculo en una constante y un cálculo en un campo, utilice el primero. LIKE es un cálculo en el campo! –

+0

Esta es definitivamente la mejor solución. Especialmente si tiene indexación en la fecha. –

6

Mira la función YEAR()docs para MySQL

SELECT * FROM table WHERE YEAR(date)=2012 
-2

SELECT * FROM tabla donde DATEPART (año, [FECHA]) = 2012

Cuestiones relacionadas