mysql日期(datatime)比较问题

rasou 2014-12-19 11:00:32
Mysql5.5手册里是这么说的:

引用
假如参数中的一个为 TIMESTAMP 或 DATETIME 列,而其它参数均为常数, 则在进行比较前将常数转为
timestamp。这样做的目的是为了使ODBC的进行更加顺利。注意,这不适合IN()中的参数!为了更加可
靠,在进行对比时通常使用完整的 datetime/date/time字符串。


那么问题来了,之前经常这么写sql,例如:

select * from table where createtime >= '2014-12-01 12:00:00' and createtime <= '2014-12-01 12:59:59';


其中createtime字段是datetime类型的,这么写sql不会报错,但网上说有可能查的不准,真是这样吗,为什么?
...全文
681 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rasou 2014-12-19
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
引用
其中createtime字段是datetime类型的,这么写sql不会报错,但网上说有可能查的不准,真是这样吗,为什么?
网上说,或者听别人说。这类东西都是靠不住。
不过mysql手册上好像也没说比较操作符后面可以跟日期字符串啊。 另外,这么写:
select * from table where createtime >= '2014-12-01 12:00:00' and createtime <= '2014-12-01 12:59:59';
和这么写:
select * from table where createtime >= STR_TO_DATE('2014-12-01 12:00:00','%Y-%m-%d %H:%i:%s') and createtime <= STR_TO_DATE('2014-12-01 12:59:59','%Y-%m-%d %H:%i:%s');
有啥却别?要是没区别的话为什么还要有STR_TO_DATE这个函数,还有诸如用UNIX_TIMESTAMP函数转换日期字段/字符串的方式写sql,怎么觉着有点乱呢。
ACMAIN_CHM 2014-12-19
  • 打赏
  • 举报
回复
引用
其中createtime字段是datetime类型的,这么写sql不会报错,但网上说有可能查的不准,真是这样吗,为什么?
网上说,或者听别人说。这类东西都是靠不住。
rasou 2014-12-19
  • 打赏
  • 举报
回复
明白
ACMAIN_CHM 2014-12-19
  • 打赏
  • 举报
回复
'12/01/2014' 请问是几月? 同理,'2014-12-01'又是几月? MYSQL是凭什么知道的呢? 而STR_TO_DATE('2014-12-01 12:59:59','%Y-%m-%d %H:%i:%s'); 则非常明确。 如果仍有其它问题,建议重新开贴在楼顶描述清楚,毕竟很多人不会去花时间看下面的其它问题的。

56,912

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧