在MySQL中的两个日期之间获取数据时出现问题

时间:2019-01-24 06:46:08

标签: mysql

这是我的tb_orders桌子:

https://github.com/tidyverse/dplyr/issues/482

我想获取日期2016-08-292017-01-14之间的订单,包括上述日期。

我尝试使用ANDBETWEEN运算符进行两次查询,但是得到的结果与预期不符。

SELECT * FROM `tb_orders` WHERE `order_date` >= DATE('2016-08-29') AND `order_date` <= DATE('2017-01-14') 

enter image description here

SELECT * FROM `tb_orders` WHERE `order_date` BETWEEN DATE('2016-08-29') AND DATE('2017-01-14') 

enter image description here

我不明白为什么我没有获得日期为2017-01-14的记录?有想法吗?

3 个答案:

答案 0 :(得分:2)

您可以尝试以下操作-由于您仅传递日期,因此您需要将order_Date列转换为日期,因为您的列数据类型是时间戳记

SELECT * FROM `tb_orders` 
WHERE date(`order_date`) >= '2016-08-29' AND date(`order_date`) <= '2017-01-14'

答案 1 :(得分:1)

您的问题是时间戳。如果不将其放在date参数中,它将使用00:00:00进行初始化,并且2017-01-14 05:10:26会晚于2017-01-14 00:00:00。

使用:

SELECT * 
FROM `tb_orders` 
WHERE `order_date` BETWEEN TIME('2016-08-29') AND TIME('2017-01-14 23:59:59'):

答案 2 :(得分:1)

一个简单的日期函数将执行以下操作。它简短而精确。

Select * FROM tbl_orders
WHERE date(order_date) BETWEEN '2016-08-29' AND '2017-01-14'