MySQL的date时间比较

例如下面的查询工作正常:

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

但是,这显然是执行“string”比较 – 我想知道是否有一个内置于MySQL的函数,特别是“date时间”比较。

这显然是在进行“string”比较

否 – 如果date/时间格式与支持的格式相匹配,MySQL将执行隐式转换,以根据与其进行比较的列将值转换为DATETIME。 同样的事情发生在:

 WHERE int_column = '1' 

…“1”的string值被转换为INTeger,因为int_column的数据types是INT,而不是CHAR / VARCHAR / TEXT。

如果你想显式地将string转换为DATETIME, STR_TO_DATE函数将是最好的select:

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

但这显然是在进行“string”比较

不会。该string将被自动转换为DATETIME值。

见11.2。 expression式评估中的types转换。

当操作符与不同types的操作数一起使用时,会发生types转换以使操作数兼容。 一些转换隐式发生。 例如,MySQL会根据需要自动将数字转换为string,反之亦然。

我知道它很老,但我只是遇到了问题,这就是我在SQL文档中看到的:

[为了在使用BETWEEN和date或时间值时获得最佳结果,]使用CAST()将值显式转换为所需的数据types。 示例:如果将DATETIME与两个DATE值进行比较,请将DATE值转换为DATETIME值。 如果在比较DATE时使用string常量(如“2001-1-1”),则将该string转换为DATE。

我认为最好是使用STR_TO_DATE,因为他们花时间为此创build了一个函数,而且事实上,我在BETWEEN文档中find了这个…

Interesting Posts