You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用当前日期查询tbl_announcements表中日期区间内的记录?

解决方案:筛选当前日期在from/to区间内的公告记录

嘿,这个需求其实很容易实现,核心就是用SQL的日期比较逻辑,结合你使用的数据库的当前日期/时间函数就行。我分两种常见场景给你说明:


场景1:只判断日期部分是否在区间内(忽略具体时间)

如果你的需求是只要当前日期落在from和to的日期范围内,不管当天的具体时间——比如今天是2018-01-28,哪怕某条记录的from是2018-01-28 14:02:00,to是2018-01-29 16:02:00,这条记录也需要被筛选出来。

不同数据库的写法:

  • MySQL/MariaDB:

    SELECT * 
    FROM tbl_announcements
    WHERE DATE(`from`) <= CURDATE() 
      AND DATE(`to`) >= CURDATE();
    

    这里DATE()函数用来提取datetime字段的日期部分,CURDATE()获取当前系统日期(不带时间)。另外注意from是SQL关键字,所以用反引号括起来避免语法错误。

  • SQL Server:

    SELECT * 
    FROM tbl_announcements
    WHERE CAST([from] AS DATE) <= CAST(GETDATE() AS DATE)
      AND CAST([to] AS DATE) >= CAST(GETDATE() AS DATE);
    

    用CAST()把datetime字段转成DATE类型,GETDATE()获取当前时间后再转成日期。这里用方括号括起关键字from。

  • PostgreSQL:

    SELECT * 
    FROM tbl_announcements
    WHERE DATE("from") <= CURRENT_DATE
      AND DATE("to") >= CURRENT_DATE;
    

场景2:判断当前精确时间是否在区间内

如果需要严格匹配当前时间点是否处于from和to的datetime区间内——比如现在是2018-01-28 10:00:00,只有from≤这个时间且to≥这个时间的记录才被选中,写法更直接:

  • MySQL/MariaDB:

    SELECT * 
    FROM tbl_announcements
    WHERE `from` <= NOW() 
      AND `to` >= NOW();
    

    NOW()获取当前系统的datetime(带时分秒)。

  • SQL Server:

    SELECT * 
    FROM tbl_announcements
    WHERE [from] <= GETDATE()
      AND [to] >= GETDATE();
    
  • PostgreSQL:

    SELECT * 
    FROM tbl_announcements
    WHERE "from" <= CURRENT_TIMESTAMP
      AND "to" >= CURRENT_TIMESTAMP;
    

小提示

不管哪种场景,确保你的from和to字段是datetime/timestamp类型,这样日期比较才会准确。如果是字符串类型的话,需要先转成日期类型再比较(比如MySQL用STR_TO_DATE()),不过建议数据库里直接存日期类型更规范。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:53:51