存储时间验证
问题的引出:今天看到客户有这么个需求,本来报表的数据是按天跑存储就行了,但是客户经常会发生改数据情况,改了数据后报表就不能把改后的数据展示出来。这就需要从新刷数据。但是问题是,客户所改的数据并不是昨天的数据,是这个月范围内的数据。所以就要求存储刷数据的时候刷的是当月一号截至到昨天的数据。还有一个问题是,在每个月月初的时候,客户会稽核上个月的数据,发现上个月的数据不对的情况进行更改。然后还需要重新刷数据。这就要求存储在月初的时候具备刷上个月数据的能力。最后还有一点就是数据有可能靠存储自己刷会满足不了客户的要求,这就要求用户也可以手动调用存储刷数据。
总结以上种种情况写出以下时间验证:
startTime varchar2(19) ; --开始时间
endTime varchar2(19) ;--结束时间
v_errorcode NUMBER; --Oracle错误代码
v_errortext VARCHAR(250); --Oracle错误描述
begin
--处理日期格式
if (length(st) = 10 and length(et) = 10) then
startTime :=st; --yyyy-mm--dd格式的数据
endTime :=et;
else
if (length(st) = 8 and length(et) = 8) then --yyyymmdd格式的日期
startTime := to_char(to_date(st, 'yyyy-mm-dd'), 'yyyy-mm-dd');
endTime := to_char(to_date(et, 'yyyy-mm-dd'), 'yyyy-mm-dd');
else
if length(st) = 8 then --只输入开始时间,结束时间就默认为当天的前一天。
startTime := to_char(to_date(st, 'yyyy-mm-dd'), 'yyyy-mm-dd');
if(startTime = to_char(trunc(sysdate, 'mm'), 'yyyy-mm-dd')) then --判断开始时间是不是为一号。
endTime := startTime; --如果为一号把开始时间设置为上个月的一号,结束时间为这个月的一号
startTime := to_char(trunc(sysdate-2,'mm'),'yyyy-mm-dd');
else
endTime := to_char(sysdate - 1, 'yyyy-mm-dd');
end if;
else --判断时间点是不是在月初的第一周,第一周刷上月的数据。
if to_char(trunc(sysdate-7,'mm'),'yyyy-mm-dd')<>to_char(trunc(sysdate,'mm'),'yyyy-mm-dd')
then
startTime := to_char(trunc(sysdate-7,'mm'),'yyyy-mm-dd');
endTime := to_char(last_day(trunc(sysdate - 1, 'dd')),'yyyy-mm-dd');
else --如果不输入时间,默认为当月的第一天到当天的前一天。
startTime := to_char(trunc(sysdate, 'mm'), 'yyyy-mm-dd');
endTime := to_char(sysdate - 1, 'yyyy-mm-dd');
end if;
end if;
end if;
end if;
以上时间验证如果有不足,或者什么漏洞还忘看到的人批评指正。
浙公网安备 33010602011771号