Mysql日期函数不能用于少于

By simon at 2018-02-28 • 0人收藏 • 21人看过

我需要得到所有等于和低于2012-12-28我使用波纹管的记录 查询这个,booking_time是DATETIME字段,并且有记录少 比2012-12-28,但它返回零行。有没有人有想法?

SELECT * FROM ctx_bookings WHERE DATE(booking_time)<=2012-12-28 ORDER BY id ASC
表提交
+---------------------+
| booking_time        |
+---------------------+
| 2012-12-20 03:10:09 |
| 2012-12-25 02:10:04 |
+---------------------+
PL让任何人知道为什么会发生这种情况?

4 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

用单引号包装值,肯定会起作用

SELECT * 
FROM ctx_bookings 
WHERE DATE(booking_time) <= '2012-12-28' 
ORDER BY id ASC
  * [SQLFiddle演示](http://sqlfiddle.com/#!2/04989/3)

2018-02-28   #2

用单引号包装值,肯定会起作用

SELECT * 
FROM ctx_bookings 
WHERE DATE(booking_time) <= '2012-12-28' 
ORDER BY id ASC
  * [SQLFiddle演示](http://sqlfiddle.com/#!2/04989/3)

2018-02-28   #3

 SELECT * FROM ctx_bookings WHERE DATE(booking_time)<='2012-12-28' ORDER BY id ASC
试试这个伴侣

2018-02-28   #4

如[日期和时间文字](http://dev.mysql.com/doc/en/date- 和时间literals.html):

MySQL可以识别[DATE](http://dev.mysql.com/doc/en/datetime.html) 这些格式的值:

*作为'YYYY-MM-DD'或999中的字符串9999999376格式。 “放松” 语法是允许的:任何标点符号都可以用作分隔符 日期部分之间。 F或例如'2012-12-31',9'2012/12/31',9'2012^12^31', 和'2012@12@31'是等同的。

*作为不带分隔符的字符串s在'YYYYMMDD'或'YYMMDD'中 格式,只要该字符串作为日期有意义。例如, '20070523'一个d '070523'被解释为'2007-05-23',但是 '071332'是非法的(它具有无意义的月份和日期部分),并且是becoMES '0000-00-00'。

*提供YYYYMMDD或YYMMDD格式的数字 这个数字是有道理的一个约会。例如,19830905和 830905被解释为'1983-09-05'。

正如[@Barmar评论](https:// stackoverflow.com/questions/14051057/mysql- 日期功能不工作的少于#comment1941597214051057),你的 文字表达在2012-12-28被评估为算术 (2012 - 12) - 28,等于1,978。 Per [@ JW。的回答](https://stackoverflow.com / a / 14051067),你可以引用 表达式来获取有效的日期文字(上面的第一种形式)。 或者:   * whilst仍然引用文字,您可以使用任何其他标点符号(或甚至没有字符)作为日期之间的分隔符部分:

WHERE DATE(booking_time) <= '2012_12_28'
WHERE DATE(booking_time) <= '20121228'
  *你可以删除分隔符,并保留你的文字不加引号:
WHERE DATE(booking_time) <= 20121228
还要注意使用filter这样的标准,它使用一个函数(in 这种情况下,DATE()函数)在一列上,需要一个完整的表格扫描以评估该功能 - 因此它不会从任何方面受益 索引。更可取的选择是过滤更清楚 满足您标准的列值范围(即
times_):
WHERE booking_time < '2012-12-28' + INTERVAL 1 DAY
这是等同的因为任何时候都严格落在下列之前 一天必然发生在当日或之前ST。它是 因为该列与一个常量表达式(结果)进行比较,因此是可靠的 +操作正在进行中erministic),因此是一个索引 可以遍历booking_time以立即找到所有匹配的记录。

登录后方可回帖

Loading...