问题如下,首先一个sql如:
图1
在它select中一个date型字段出现在where条件中,两处对其格式化的样式不同(如图1),执行可以正常返回结果(如图2)
图2
但是颠倒格式化的写法(如图3),就是“-”的变成“/”,执行就没有结果了,想请教下大家,在mysql中,日期格式化它究竟是如何进行判断的呢?
图3
另外我也试过,select中字段不格式化也能正常查到数据
问题如下,首先一个sql如:
图1
在它select中一个date型字段出现在where条件中,两处对其格式化的样式不同(如图1),执行可以正常返回结果(如图2)
图2
但是颠倒格式化的写法(如图3),就是“-”的变成“/”,执行就没有结果了,想请教下大家,在mysql中,日期格式化它究竟是如何进行判断的呢?
图3
另外我也试过,select中字段不格式化也能正常查到数据
4 回答1.2k 阅读✓ 已解决
8 回答1.2k 阅读
3 回答1k 阅读✓ 已解决
2 回答1.7k 阅读
1 回答845 阅读✓ 已解决
2 回答1.2k 阅读
2 回答1k 阅读
1.我感觉你是把数据结果搞混了吧?图1的SQL怎么会得到图2的输出,你都把test表的时间列格式化成以"-"为分割符,怎么输出会是"/"为分隔符?
2.像这种date_format()之后再比较时间的大小,其实是把时间当成字符串来比较,例如
这里之所以'2019-12-12 23:54:12'>'2019-06-27'不成立,是因为通过date_format转换后,作比较的其实是两个字符串'19-12-12'和'19/06/27 120000',开头的"19"两者相等,但到了"-"和"/"比较,根据ascii可以知道,"/">"-",所以通过date_format转换之后,会出现'2019-12-12 23:54:12'<'2019-06-27'的假象。
这里也得出,要比较时间,就要把格式转换成一致,这本来就不是什么难事,为什么搞得那么乱呢?
3.不格式化也能查到数据,是MySQL能识别到你在对比时间。