最近几天在做新系统的监控,其中有个日期表要验证结果数据和当前日期的正确性,写一段比较死板的代码穷举类型来验证所有起止日期
穷举各类型,根据类型验证起止日期和当前日期在对应类型下的起止日期
返回验证结果
如果验证结果不为空且不为0 ,则对应类型的起止日期异常;
如果验证结果为空,则对应类型未在穷举验证内;
代码框的代码不能修改吗
- select s.inc_type "日期类型",
- s.inc_start "开始日期",
- s.inc_end "结束日期",
- s.case "验证结果"
- from (select distinct eit.inc_type,
- eit.inc_start,
- eit.inc_end,
- case
- when eit.inc_type = 'D' then --日
- eit.inc_start - to_char(sysdate - 1, 'yyyymmdd')
- when eit.inc_type = 'DA1' then --日期往后增量
- eit.inc_end - to_char(sysdate + 1, 'yyyymmdd')
- when eit.inc_type = 'DA2' then
- eit.inc_end - to_char(sysdate + 2, 'yyyymmdd')
- when eit.inc_type = 'DD1' then--日期往前增量
- eit.inc_start - to_char(sysdate - 2, 'yyyymmdd')
- when eit.inc_type = 'DD2' then
- eit.inc_start - to_char(sysdate - 3, 'yyyymmdd')
- when eit.inc_type = 'M01' then --月根据每月第一天
- eit.inc_end -
- to_char(trunc(sysdate, 'mm'), 'yyyymmdd')
- when eit.inc_type = 'M' then
- eit.inc_end -
- to_char(trunc(sysdate, 'mm'), 'yyyymmdd')
- when eit.inc_type in ('W0', 'W7') then --周 对比当前日期和本周第几天来确定
- eit.inc_end -
- to_char(sysdate - to_char(sysdate, 'd') + 1,
- 'yyyymmdd')
- when eit.inc_type = 'W1' then
- eit.inc_end -
- to_char(sysdate - to_char(sysdate, 'd') + 2,
- 'yyyymmdd')
- when eit.inc_type = 'W2' then
- eit.inc_end -
- to_char(sysdate - to_char(sysdate, 'd') + 3,
- 'yyyymmdd')
- when eit.inc_type = 'W3' then
- eit.inc_end -
- to_char(sysdate - to_char(sysdate, 'd') + 4,
- 'yyyymmdd')
- when eit.inc_type = 'W4' then
- eit.inc_end -
- to_char(sysdate - to_char(sysdate, 'd') + 5,
- 'yyyymmdd')
- when eit.inc_type = 'W5' then
- eit.inc_end -
- to_char(sysdate - to_char(sysdate, 'd') + 6,
- 'yyyymmdd')
- when eit.inc_type = 'W6' then
- eit.inc_end -
- to_char(sysdate - to_char(sysdate, 'd') + 7,
- 'yyyymmdd')
- when eit.inc_type like 'Q%' then --季类型 分四季check月是否正确
- SUBSTR(eit.inc_end, 5, 4) -
- decode(to_char(sysdate, 'Q'),
- '1',
- '0101',
- '2',
- '0401',
- '3',
- '0701',
- '4',
- '1101')
- when eit.inc_type = 'Y' then
- SUBSTR(eit.inc_end, 1, 4) -
- to_char(sysdate, 'YYYY')
- end case
- from etl_inc_time_config eit
- where upper(eit.inc_type) <> 'INIT'
- and ((eit.inc_type like 'W%' and
- substr(eit.inc_type, 2, 1) < to_char(sysdate, 'd')) or --周取数需到当前周期才生效
- eit.inc_type not like 'W%')) s
- where s.case <> 0 --结果为0 则数据正常 非0 则与规则不符
- or s.case is null
阅读(1428) | 评论(1) | 转发(0) |