如何在SQL中获取上月22日的日期?
获取上月22日的SQL实现方案
不同数据库的语法略有差异,以下是主流数据库的实现方式:
MySQL/MariaDB
通过日期格式化固定日部分为22,同时回退一个月:
SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), '%Y-%m-22') AS last_month_22nd;
逻辑:DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH) 得到上月的当前日期,再用DATE_FORMAT将日部分强制替换为22,确保结果始终是上月22日。
SQL Server
先定位上月第一天,再累加21天得到22日(自动处理跨年场景):
SELECT DATEADD(DAY, 21, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)) AS last_month_22nd;
逻辑:DATEDIFF(MONTH, 0, GETDATE()) - 1 计算出上月相对于基准日期的月数,DATEADD转换为上月第一天,最后加21天得到上月22日。
PostgreSQL
基于当月第一天回退一个月,再累加21天:
SELECT (DATE_TRUNC('month', CURRENT_DATE) - INTERVAL '1 month') + INTERVAL '21 days' AS last_month_22nd;
逻辑:DATE_TRUNC('month', CURRENT_DATE) 获取当月第一天,减1个月得到上月第一天,加21天即为上月22日。
Oracle
截断到上月第一天后累加21天:
SELECT TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM') + 21 AS last_month_22nd FROM DUAL;
逻辑:ADD_MONTHS(SYSDATE, -1) 回退一个月,TRUNC(..., 'MM') 截断到上月第一天,加21天得到上月22日。
内容的提问来源于stack exchange,提问作者biswa das
相关产品推荐
相关产品推荐

