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

如何在Java HSQL数据库中查询上月首日及下月末日?PostgreSQL方法失效

HSQLDB 日期查询:获取上月第一天及上月第一天+下月最后一天

嘿,我明白你在HSQLDB里用PostgreSQL的日期查询语句碰壁了——毕竟不同数据库的日期函数语法差异挺大的。下面我给你针对这两个问题的具体解决方案,都是HSQLDB原生支持的写法:

1. 获取上月的第一天

HSQLDB没有date_trunc函数,但可以用TRUNCATE()结合ADD_MONTHS()来实现需求,具体SQL语句如下:

SELECT TRUNCATE(ADD_MONTHS(CURRENT_DATE, -1), 'MONTH') AS first_day_of_last_month 
FROM INFORMATION_SCHEMA.SYSTEM_USERS;

这里的逻辑拆解一下:

  • CURRENT_DATE:获取当前系统日期
  • ADD_MONTHS(CURRENT_DATE, -1):将当前日期往前推1个月,得到上月的同日期
  • TRUNCATE(..., 'MONTH'):把日期截断到当月的第一天,这样就得到了上月的第一天

小提示:HSQLDB的SELECT语句通常需要FROM子句,这里用INFORMATION_SCHEMA.SYSTEM_USERS作为虚拟表(这个表在HSQLDB中总是存在),如果你用的是较新版本的HSQLDB,也可以用(VALUES(1)) AS t来替代。

2. 查询上月第一天和下月最后一天

结合上面的方法,再用HSQLDB的LAST_DAY()函数就能同时获取上月第一天和下月最后一天,完整语句如下:

SELECT
    TRUNCATE(ADD_MONTHS(CURRENT_DATE, -1), 'MONTH') AS first_day_of_last_month,
    LAST_DAY(ADD_MONTHS(CURRENT_DATE, 1)) AS last_day_of_next_month
FROM INFORMATION_SCHEMA.SYSTEM_USERS;

新增部分的逻辑:

  • ADD_MONTHS(CURRENT_DATE, 1):将当前日期往后推1个月,得到下月的同日期
  • LAST_DAY(...):直接提取该日期所在月份的最后一天,也就是下月的最后一天

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:04:10