如何用WHERE子句查询特定日期区间内的数据?

2026-04-27 18:390阅读0评论SEO基础
  • 内容介绍
  • 相关推荐

本文共计932个文字,预计阅读时间需要4分钟。

如何用WHERE子句查询特定日期区间内的数据?

直接使用`BETWEEN`查询可能遗漏当天全部数据,因为`BETWEEN`是闭区间,而数据库中的`DATETIME`字段默认包含时分秒,如`'2023-12-31 14:22:05'`。因此,应使用以下查询确保包含当天全部数据:

更稳妥的做法是用开闭区间:date_column >= '2023-01-01' AND date_column 。这样无论字段是 <code>DATE 还是 DATETIME,都能完整覆盖整个自然年。

  • MySQL/PostgreSQL/SQL Server 都支持这种写法,语义清晰且可走索引
  • 避免用 DATE(date_column) = '2023-01-01',它会让索引失效
  • 如果字段允许 NULL,BETWEEN 会自动跳过这些行,而显式比较不受影响

日期字符串格式必须和字段类型对齐

传入的字符串格式不对,轻则查不到数据,重则触发隐式转换导致全表扫描。比如字段是 DATE 类型,写成 WHERE create_date = '2023-01-01 10:00:00',MySQL 可能转成 '2023-01-01',但 PostgreSQL 会直接报错或返回空。

安全做法是:用字段本身类型对应的最小粒度字符串。

阅读全文

本文共计932个文字,预计阅读时间需要4分钟。

如何用WHERE子句查询特定日期区间内的数据?

直接使用`BETWEEN`查询可能遗漏当天全部数据,因为`BETWEEN`是闭区间,而数据库中的`DATETIME`字段默认包含时分秒,如`'2023-12-31 14:22:05'`。因此,应使用以下查询确保包含当天全部数据:

更稳妥的做法是用开闭区间:date_column >= '2023-01-01' AND date_column 。这样无论字段是 <code>DATE 还是 DATETIME,都能完整覆盖整个自然年。

  • MySQL/PostgreSQL/SQL Server 都支持这种写法,语义清晰且可走索引
  • 避免用 DATE(date_column) = '2023-01-01',它会让索引失效
  • 如果字段允许 NULL,BETWEEN 会自动跳过这些行,而显式比较不受影响

日期字符串格式必须和字段类型对齐

传入的字符串格式不对,轻则查不到数据,重则触发隐式转换导致全表扫描。比如字段是 DATE 类型,写成 WHERE create_date = '2023-01-01 10:00:00',MySQL 可能转成 '2023-01-01',但 PostgreSQL 会直接报错或返回空。

安全做法是:用字段本身类型对应的最小粒度字符串。

阅读全文