Ara 312009
oracle regexp yeteneklerini kullanarak to_date fonksiyonunda hata verecek tarihleri önceden tespit edip hataya düşmeden null olarak dönmesini sağladık . önce fonksiyonu vereyim sonrasında bi cümlem daha olacak (:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | CREATE OR REPLACE FUNCTION to_date2(txt IN VARCHAR2,Format IN Varchar2:='DD.MM.YYYY') RETURN VARCHAR2 IS Gun INT; Ay INT; Yil INT; BEGIN IF REGEXP_LIKE ( txt, '(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.]((19|20)\d\d)' ) THEN Gun := TO_NUMBER(REGEXP_REPLACE ( txt, '(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.]((19|20)\d\d)', '\1' )); Ay := TO_NUMBER(REGEXP_REPLACE ( txt, '(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.]((19|20)\d\d)', '\2' )); Yil := TO_NUMBER(REGEXP_REPLACE ( txt, '(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.]((19|20)\d\d)', '\3' )); IF MOD (Yil, 4) = 0 THEN IF (Ay = 2 AND Gun > 29) THEN RETURN NULL; END IF; ELSIF (Ay = 2 AND Gun > 28) THEN RETURN NULL; END IF; IF (Ay <= 7) THEN IF (MOD (Ay, 2) = 1 AND Gun > 31) OR (MOD (Ay, 2) = 0 AND Gun > 30) THEN RETURN NULL; END IF; ELSIF (Ay > 7) THEN IF (MOD (Ay, 2) = 0 AND Gun > 31) OR (MOD (Ay, 2) = 1 AND Gun > 30) THEN RETURN NULL; END IF; END IF; RETURN TO_CHAR (to_date(Gun||'.'||Ay||'.'Yil),Format); END IF; RETURN NULL; END; / |
bunlar yerine to_date ve to_char fonksiyonlarını içeren bir fonskiyonla hata yakalandığında null dön diyebilirdik . fonksiyonun tek yaptığı 01/10.2009 gibi farklı işaretler kullanıldığında da ayırabilmek (: ama madem bu kadar uğraştım yayınliim dedim (:
iyi çalışmalar








thanx for this usefull function but this is require only 1 format it’s day.month.year..