Re: how to test a string for a valid date in sql
From: Gerard H. Pille <ghp_at_skynet.be>
Date: Sat, 12 Dec 2009 14:16:55 +0100
Message-ID: <4b23975d$0$2860$ba620e4c_at_news.skynet.be>
Jaap W. van Dijk schreef:
> On Dec 11, 11:30 am, yossarian<yossaria..._at_operamail.com> wrote:
>> Jaap W. van Dijk wrote:
>>
>>> Is it possible to test with format_regexp if ('31112009', 'ddmmyyyy')
>>> is a valid date, or ('29022000', 'ddmmyyyy')?
>>
>> http://www.regular-expressions.info/dates.html
>
> Thanks for the pointer. I will use a case statement similar to the
> perl alternative on this page. It is less complicated than I thought
> it would be.
>
> Regards,
> Jaap.
from (
) ds
/ Received on Sat Dec 12 2009 - 07:16:55 CST
Date: Sat, 12 Dec 2009 14:16:55 +0100
Message-ID: <4b23975d$0$2860$ba620e4c_at_news.skynet.be>
Jaap W. van Dijk schreef:
> On Dec 11, 11:30 am, yossarian<yossaria..._at_operamail.com> wrote:
>> Jaap W. van Dijk wrote:
>>
>>> Is it possible to test with format_regexp if ('31112009', 'ddmmyyyy')
>>> is a valid date, or ('29022000', 'ddmmyyyy')?
>>
>> http://www.regular-expressions.info/dates.html
>
> Thanks for the pointer. I will use a case statement similar to the
> perl alternative on this page. It is less complicated than I thought
> it would be.
>
> Regards,
> Jaap.
Zoals toen we jong waren:
select
ds.*,
case
when maand in (1,3,5,7,8,10,12) and dag between 1 and 31 or maand in (4,6,9,11) and dag between 1 and 30 or maand = 2 and dag between 1 and 28 or maand = 2 and dag = 29 and mod(jaar,4) = 0 and (mod(jaar,100) != 0 or mod(jaar,400) = 0) then to_date(dag||maand||jaar,'DDMMYYYY') else to_date('01011999','DDMMYYYY')end
from (
select substr(datum,1,2) dag, substr(datum,3,2) maand, substr(datum,5,4) jaar from ( select case when regexp_like(d.datum,'[0-9]{8}') then d.datum else '31122009' end datum from ( select '29022009' datum from dual union all select '31042009' datum from dual union all select '29022008' datum from dual union all select '29022000' datum from dual union all select '29021900' datum from dual union all select '00022000' datum from dual union all select '01022009' datum from dual ) d )
) ds
/ Received on Sat Dec 12 2009 - 07:16:55 CST