rango hora fechas fecha consultar comparar sql mysql implicit-conversion explicit-conversion

fechas - comparación de fecha y hora mysql



mysql comparar fechas sin hora (3)

... esto obviamente está haciendo una comparación de ''cuerdas''

No - si el formato de fecha / hora coincide con el formato admitido, MySQL realiza la conversión implícita para convertir el valor a DATETIME, en función de la columna con la que se compara. Lo mismo sucede con:

WHERE int_column = ''1''

... donde el valor de cadena de "1" se convierte en un INTeger porque el tipo de datos de la columna int_column es INT, no CHAR / VARCHAR / TEXT.

Si desea convertir explícitamente la cadena a DATETIME, 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'')

Por ejemplo, la siguiente consulta funciona bien:

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

Pero esto obviamente está haciendo una comparación de ''cuerdas'': me preguntaba si había una función incorporada en MySQL que específicamente hiciera comparaciones de ''fecha y hora''.


Pero esto obviamente está realizando una comparación de ''cuerdas''

No. La cadena se convertirá automáticamente en un valor DATETIME.

Ver 11.2. Escriba la conversión en la evaluación de expresiones.

Cuando se usa un operador con operandos de diferentes tipos, se produce una conversión de tipo para hacer que los operandos sean compatibles. Algunas conversiones ocurren implícitamente. Por ejemplo, MySQL convierte automáticamente los números en cadenas según sea necesario, y viceversa.


Sé que es bastante viejo, pero acabo de encontrar el problema y hay lo que vi en el documento SQL:

[Para obtener mejores resultados al usar BETWEEN con valores de fecha u hora,] use CAST () para convertir explícitamente los valores al tipo de datos deseado. Ejemplos: si compara un DATETIME con dos valores de DATE, convierta los valores de DATE a DATETIME. Si usa una constante de cadena como ''2001-1-1'' en una comparación con una FECHA, transfiera la cadena a una FECHA.

Supongo que es mejor usar STR_TO_DATE ya que se tomaron el tiempo para hacer una función solo para eso y también el hecho de que encontré esto en el documento BETWEEN ...