PL/SQL检查日期有效

问题描述 投票:0回答:3

如果我在pl/sql中有一个日期格式

DDMM
,我想对其进行验证。正确的方法是什么?

DD

是一天,
MM
是飞蛾。

For an example: 0208 - is a valid date 3209 - is not a valid date 0113 - is not a valid date.

	
例如,您可以写这样的函数,例如:
oracle-database validation date plsql
3个回答
6
投票
create or replace function is_valid(p_val in varchar2) return number is not_a_valid_day exception; not_a_valid_month exception; pragma exception_init(not_a_valid_day, -1847); pragma exception_init(not_a_valid_month, -1843); l_date date; begin l_date := to_date(p_val, 'ddmm'); return 1; exception when not_a_valid_day or not_a_valid_month then return 0; end; SQL> with test_dates(dt) as( 2 select '0208' from dual union all 3 select '3209' from dual union all 4 select '0113' from dual 5 ) 6 select dt, is_valid(dt) as valid 7 from test_dates 8 / DT VALID ---- ---------- 0208 1 3209 0 0113 0

-如果您有Oracle12c

1
投票
with test_dates(dt) as( select '0208' from dual union all select '3209' from dual union all select '0113' from dual) select dt, validate_conversion(dt as date, 'DDMM') as valid from test_dates DT VALID ---- ---------- 0208 1 3209 0 0113 0

如果日期为null,则validate_conversion返回1,因为null是日期列的有效值。

to_date

0
投票

declare x date; begin x := to_date('3210', 'DDMM'); -- Will raise ORA-1847 x := to_date('0113', 'DDMM'); -- Will raise ORA-1843 exception when others then if sqlcode in (-1843, -1847) then dbms_output.put_line('Invalid Date!'); null; else raise; end if; end;

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.