mysql BETWEEN日期范围不起作用

时间:2016-10-05 07:56:19

标签: mysql

我有一个名为barcode_log的表,这些是表中的所有数据。

Shawn's comment

现在如果我运行此查询

SELECT * FROM `barcode_log` WHERE barcode_log.assign_time BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY) AND CURRENT_DATE;

我得到了这个结果

All results

但它应返回所有行,因为所有数据仅在本月内。 assign_time字段存储为datetime。知道我做错了吗?

3 个答案:

答案 0 :(得分:2)

您忽略了time部分(hh:mm:ss)。

如果结束日期设置为当前日期的结束时间戳,那么您也可以获取当天的数据。

BETWEEN是包容性的

SELECT
    *
FROM
    `barcode_log`
WHERE
    barcode_log.assign_time BETWEEN DATE_SUB(
        CURRENT_DATE,
        INTERVAL 30 DAY
    )
AND TIMESTAMP(CONCAT(CURDATE(),' ','23:59:59'));

答案 1 :(得分:2)

虽然接受的答案有效,但有一个更简单的解决方案。只需获取datetime列的日期部分:

SELECT 
     * 
FROM 
    `barcode_log` 
WHERE 
    DATE(barcode_log.assign_time) 
    BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY) AND CURRENT_DATE;

答案 2 :(得分:0)

还有另一种方法:barcode_log.assign_time 字段上的 CAST()。

SELECT * 
FROM `barcode_log` 
WHERE CAST(barcode_log.assign_time AS DATE)
BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY) AND CURRENT_DATE;

这从比较中排除了时间,并且可以很好地满足您的目的。