Pregunta

Por ejemplo, la siguiente consulta funciona bien:

SELECT * 
  FROM quotes 
 WHERE expires_at <= '2010-10-15 10:00:00';

Pero esto es, obviamente, realizando una comparación 'cadena' - Me preguntaba si había una función integrada en MySQL que hace específicamente comparaciones '' de fecha y hora

.
¿Fue útil?

Solución

... esto es, obviamente, realizando una comparación 'cadena'

No - si el formato de fecha / hora coincide con el formato compatible, realiza MySQL conversión implícita para convertir el valor a una fecha y hora, sobre la base de la columna que se está comparando a. Lo mismo sucede con:

WHERE int_column = '1'

... donde el valor de cadena de "1" se convierte en un entero porque el tipo de datos de int_column es INT, no CHAR / VARCHAR / TEXTO.

Si desea convertir explícitamente la cadena a una fecha y hora, la función STR_TO_DATE sería la mejor opción:

WHERE expires_at <= STR_TO_DATE('2010-10-15 10:00:00', '%Y-%m-%d %H:%i:%s')

Otros consejos

Pero esto es, obviamente, realizando una comparación 'cadena'

No. La cadena será lanzado de forma automática en un valor de fecha y hora.

11.2. Tipo de conversión en la expresión de Evaluación.

Cuando un operador se utiliza con operandos de diferentes tipos, la conversión de tipo ocurre para hacer compatible los operandos. Algunas conversiones se producen de forma implícita. Por ejemplo, MySQL convierte automáticamente números a cadenas según sea necesario, y viceversa.

Sé que es bastante viejo pero acabo de encontrar el problema y no es lo que vi en el doc SQL:

[Para obtener los mejores resultados al utilizar el medio con valores de fecha u hora,] uso CAST () para convertir explícitamente los valores para el tipo de datos deseado. Ejemplos: Si se compara una fecha y hora a dos valores DATE, convertir los valores de fecha a los valores de fecha y hora. Si utiliza una constante de cadena como '1/1/2001' en una comparación a una fecha, tire la cadena en una fecha.

supongo que es mejor usar STR_TO_DATE desde que tomaron el tiempo para hacer una función sólo para eso y también el hecho de que he encontrado esto en el ENTRE doc ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top