Oracle sql自定义统计月范围

发布时间 2023-11-14 10:41:36作者: eprtr

 

思路:
1,使用 SUBSTR( to_char( INSPECTION_DATE, 'yyyy-mm-dd' ), - 2 ) 取出天数,
2,使用 case……when……then……判断取出的天数是否大于等于25号,如果是则将日期设置成下月第一天
如果小于等于24号,则设置成当月第一天
3,使用 TRUNC(ADD_MONTHS(INSPECTION_DATE, 1),'mm') 增加一月并且设置成下月第一天,

注意:日期字段根据值类型需要进行格式化,然后才能取出天数

案例sql:
SELECT

CASE
WHEN TO_NUMBER(SUBSTR(to_char( INSPECTION_DATE, 'yyyy-mm-dd' ) , -2)) >= 25 THEN TRUNC(ADD_MONTHS(INSPECTION_DATE,1),'mm')
WHEN TO_NUMBER(SUBSTR(to_char( INSPECTION_DATE, 'yyyy-mm-dd' ) , -2)) <= 24 THEN TRUNC(INSPECTION_DATE,'mm')
ELSE NULL
END
AS 统计月,

INSPECTION_DATE 原值
FROM
INCOMING_TASK
WHERE
INSPECTION_DATE is not null

查询结果:

统计月        字段原值

2022-10-01 00:00:00   2022-10-11 10:29:47.000000
2022-10-01 00:00:00   2022-10-14 09:44:19.000000
2022-09-01 00:00:00   2022-09-01 09:18:42.000000
2022-10-01 00:00:00   2022-10-11 09:43:28.000000
2022-05-01 00:00:00   2022-08-30 18:36:16.000000
2022-10-01 00:00:00   2022-10-11 09:47:47.000000
2022-10-01 00:00:00   2022-10-11 09:44:58.000000
2022-09-01 00:00:00   2022-09-01 16:14:50.000000
2022-09-01 00:00:00   2022-09-01 16:18:11.000000
2022-09-01 00:00:00   2022-09-01 16:01:16.000000
2022-09-01 00:00:00   2022-09-01 16:02:02.000000
2022-09-01 00:00:00   2022-09-01 16:02:23.000000
2022-09-01 00:00:00   2022-09-01 16:23:17.000000