如何在SQLite中查询指定日期对应月份的最后一个工作日
SQLite查询指定日期对应月份最后一个工作日的实现方法
实现逻辑
默认工作日定义为周一到周五,排除周六周日,实现逻辑如下:
- 先计算指定日期所在月份的最后一天
- 判断最后一天的星期属性:
- 若为周六,向前偏移1天
- 若为周日,向前偏移2天
- 其余时间直接返回当月最后一天
可用查询语句
SELECT CASE strftime('%w', last_day_of_month) -- 周六往前推1天 WHEN '6' THEN date(last_day_of_month, '-1 day') -- 周日往前推2天 WHEN '0' THEN date(last_day_of_month, '-2 days') ELSE last_day_of_month END AS last_workday_of_month FROM ( -- 替换此处的输入日期为你需要查询的指定日期,推荐使用YYYY-MM-DD格式 SELECT date('你的指定日期', 'start of month', '+1 month', '-1 day') AS last_day_of_month ) AS month_last_day;
使用示例
示例1:查询2021年11月的最后一个工作日
将子查询中的日期替换为'2021-11-17',执行后返回结果为2021-11-30,符合预期。
示例2:查询2022年4月的最后一个工作日
将子查询中的日期替换为'2022-04-30',执行后返回结果为2022-04-29,符合预期。
注意事项
- 上述逻辑仅排除周末,不包含法定节假日判断。如果需要适配法定节假日,需要自行维护一张法定节假日数据表,在上述结果基础上额外做偏移过滤。
- 输入日期请使用SQLite支持的标准格式,优先选择
YYYY-MM-DD格式避免日期解析错误。
内容的提问来源于stack exchange,提问作者yoohoo
相关产品推荐
相关产品推荐

