出现这种情况的原因可能是由于时区的问题。在 SQL 查询中,日期和时间通常会根据时区进行处理。如果没有明确指定时区,不同的数据库管理系统可能会默认使用不同的时区。
为了解决这个问题,可以采取以下几种方法之一:
AT TIME ZONE
关键字将日期和时间转换成指定的时区,如下所示:-- 白天的查询
SELECT *
FROM your_table
WHERE your_date_column BETWEEN '2022-01-01 00:00:00' AND '2022-01-01 23:59:59' AT TIME ZONE 'UTC';
-- 相同范围的日期范围查询
SELECT *
FROM your_table
WHERE your_date_column BETWEEN '2022-01-01 00:00:00' AND '2022-01-01 23:59:59' AT TIME ZONE 'UTC';
CONVERT_TZ
函数将日期和时间转换成指定的时区,如下所示:-- 白天的查询
SELECT *
FROM your_table
WHERE CONVERT_TZ(your_date_column, 'UTC', 'Asia/Shanghai') BETWEEN '2022-01-01 00:00:00' AND '2022-01-01 23:59:59';
-- 相同范围的日期范围查询
SELECT *
FROM your_table
WHERE CONVERT_TZ(your_date_column, 'UTC', 'Asia/Shanghai') BETWEEN '2022-01-01 00:00:00' AND '2022-01-01 23:59:59';
DATE_TRUNC
函数来截断日期时间到指定的精度,如下所示:-- 白天的查询
SELECT *
FROM your_table
WHERE DATE_TRUNC('day', your_date_column) = DATE_TRUNC('day', '2022-01-01'::date);
-- 相同范围的日期范围查询
SELECT *
FROM your_table
WHERE DATE_TRUNC('day', your_date_column) BETWEEN DATE_TRUNC('day', '2022-01-01'::date) AND DATE_TRUNC('day', '2022-01-01'::date);
根据具体的数据库管理系统和应用场景,选择适合的方法来解决白天的 SQL 查询与相同范围的日期范围 SQL 查询结果不一致的问题。