You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MySQL技术问询:如何查询两个日期之间的数据?

查询MySQL数据表中两个日期之间的数据的实现方法

假设你的数据表名为client_credit(如果实际表名不同,请替换成你的表名),首先明确你的表结构如下:

ID_ClientCode_HouseJangka_KreditAngsuran_KreditDate
PR-331HM-00235年105000002010-11-20
PR-331HM-00453年48000002011-04-02
PR-331HM-00503年52000002011-05-03
PR-332HM-002410年8000002010-06-08
PR-333HM-00358年2000000201...

要查询该表中两个日期之间的数据,MySQL提供了几种简单直接的实现方式,下面逐一说明:

1. 使用 BETWEEN 关键字(包含两端日期)

这是最直观的写法,会包含指定的起始和结束日期的所有记录:

SELECT *
FROM client_credit
WHERE Date BETWEEN '2010-01-01' AND '2011-05-01';

比如上面的查询会返回Date字段为2010-01-01到2011-05-01之间的所有行,包括这两天的记录。

2. 使用 >= 和 <= 进行范围判断

这种写法和BETWEEN效果完全一致,但在需要更复杂的条件组合时会更灵活:

SELECT *
FROM client_credit
WHERE Date >= '2010-01-01' AND Date <= '2011-05-01';

3. 排除端点的范围查询

如果你需要查询的是起始日期之后结束日期之前的记录(不包含两端),可以用><

SELECT *
FROM client_credit
WHERE Date > '2010-01-01' AND Date < '2011-05-01';

4. 处理包含时间的Date字段(datetime类型)

如果你的Date字段实际是datetime类型(包含时分秒),直接用BETWEEN '2010-01-01' AND '2011-05-01'只会查到2011-05-01 00:00:00之前的记录,想要包含2011-05-01当天所有时间的记录,推荐用下面的写法(避免索引失效):

SELECT *
FROM client_credit
WHERE Date >= '2010-01-01' AND Date < '2011-05-02';

或者你也可以用DATE()函数提取日期部分,但这种写法会导致Date字段上的索引无法被使用(如果有索引的话),仅在没有索引或者数据量较小时推荐:

SELECT *
FROM client_credit
WHERE DATE(Date) BETWEEN '2010-01-01' AND '2011-05-01';

注意事项

  • 确保日期字符串的格式是MySQL能识别的(比如YYYY-MM-DD),避免格式错误导致查询结果异常。
  • 如果Date字段有索引,尽量避免在字段上使用函数(比如DATE()),否则会触发全表扫描,影响查询性能。

内容的提问来源于stack exchange,提问作者zOne

火山引擎 最新活动