Oracle tarih fonksiyonu yazalım.

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


bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark bookmark
tabs-top


1 Yorum »

  1. archin Says:

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

    comment-bottom

Bu yazıya yapılan yorumlar için RSS beslemeleri. TrackBack URL

Yorum yapın