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了这个…