Arşiv

Posts Tagged ‘karakter’

pl/sql de metin içindeki karakter ya da sayısal değerleri bulma

Merhaba,
Database deki tablolarımız içerisinde kayıtlı olan karmaşık (karakter + sayısal değerler )verilerden sadece karakter içeriği ya da sayısal içeriği almak istediğimiz durumlar olabilir. Bu durumlarda küçük kod parçaları ile kontrol işlemleri yapmak yerine bu işlemi genelleştirip bir fonksiyon yardımı ile bu işlemi çözebiliriz. Bu durum için bir fonksiyon hazırlayalım.

CREATE OR REPLACE FUNCTION deger_bul(gelen_metin VARCHAR2, tip NUMBER) RETURN VARCHAR2 IS
  sonuc      VARCHAR2(4000);
  tmp_deger  VARCHAR2(10);
  tmp_number NUMBER;
  i          NUMBER;
BEGIN
  
  --tip=0 >> Karakter değerler
  --tip=1 >> Sayısal değerler
  
  sonuc     := NULL;
  tmp_deger := NULL;
  IF gelen_metin IS NULL THEN
    RETURN NULL;
  END IF;
  FOR i IN 1 .. length(gelen_metin) LOOP
    IF tip = 0 THEN
      tmp_deger := substr(gelen_metin, i, 1);
      IF tmp_deger NOT IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') THEN
        sonuc := sonuc || tmp_deger;
      END IF;
    ELSIF tip = 1 THEN
      BEGIN
        tmp_deger  := substr(gelen_metin, i, 1);
        tmp_number := to_number(tmp_deger);
        sonuc      := sonuc || tmp_deger;
      EXCEPTION
        WHEN OTHERS THEN
          NULL;
      END;
    ELSE
      RETURN('Girien Tip İçin Bir Çalışma Yapılamaz.!');
    END IF;
  END LOOP;
  RETURN sonuc;
END deger_bul;

Hazırladığımız bu fonksiyon ile artık istediğimiz metin içinden istediğimiz veri setini alabiliriz. İster karakter içeriği , ister sayısal içeriği. Hemen bir örnek ile daha iyi bu durumu kavrayalım. Aşağıdaki script ile fonksiyonumuzun üç farklı duruma göre aynı anda çalıştırarak sonuçlarını görelim.

SELECT deger_bul('Bu Metin İçinden Sadece Karakter Değerleri Bulacak.1234567890', 0) karakter,
       deger_bul('Bu Metin İçinden Sadece Sayısal Değerleri Bulacak.1234567890', 1) sayisal,
       deger_bul('Bu İşlem İçin Doğru Tip Değeri Olmadığından Fonksiyon Hata Dönecek', 2) sonuc_yok
  FROM dual;
 

Fonksiyonu çalıştırdıktan sonra verdiğimiz tip değerlerine göre aldığımız sonuç aşağıdaki gibi olacaktır. Alınan sonuçtan da anlaşılacağı gibi sadece belirttiğimiz tip değerine göre sonuçlarımızı alabiliyoruz. Tanımlanan tip değeri dışında bir değer ile fonksiyon çalıştırıldığında açıklamalı olarak girilen tip için çalışma yapılmayacağı bilgisini vermiş oluyoruz.

KARAKTER SAYISAL SONUC_YOK
Bu Metin İçinden Sadece Karakter Değerleri Bulacak. 1234567890 Girien Tip İçin Bir Çalışma Yapılamaz.!

Bu basit ve işlevsel fonksiyon daha ileri amaçlar için çeşitli değişiklikler ile daha da verimli hale getirilebilinir.
Kolay gelsin.

pl/sql de sabit metin içindeki belirli bir karakter sayısını bulma

10 Kasım 2010 1 yorum

Merhaba,

Database üzerinde kayıt olan bir metin içinde ya da herhangi bir sabit metin içerisinde bir kelimenin ya da karakterin kaç kere tekrar ettiği bilgisini bulmak için aşağıdaki pl/sql fonksiyonunu yazdım. Bu fonksiyon ile ister db üzerinde kayıtlı bir alandaki metinden ister sabit olarak fonksiyona gönderilen metin içerisinden istenilen karakter sayısı bulunabilinir. Fonksiyonun kodları ve kullanımı aşağıdadır.

CREATE OR REPLACE FUNCTION karakter_sayisi(metin VARCHAR2, aranan_karakter VARCHAR2) RETURN NUMBER IS
  karakter_adet    NUMBER;
  sonraki_karakter NUMBER;
  sabit_metin      VARCHAR2(4000);
  aranan_metin     VARCHAR2(4000);
BEGIN
  karakter_adet    := 0;
  sonraki_karakter := 1;
  sabit_metin      := lower(metin);
  aranan_metin     := lower(aranan_karakter);

  FOR i IN 1 .. length(sabit_metin) LOOP
    IF (length(aranan_metin) <= (length(sabit_metin) - sonraki_karakter + 1)) AND
       (substr(sabit_metin, sonraki_karakter, length(aranan_metin)) = aranan_metin) THEN
      karakter_adet := karakter_adet + 1;
    END IF;
    sonraki_karakter := sonraki_karakter + 1;
  END LOOP;

  RETURN karakter_adet;
END karakter_sayisi;

Örnek bir kaç kullanım aşağıdadır.

SELECT karakter_sayisi('sabit bir metin', 'i') "Karakter Sayısı" FROM dual;

SELECT karakter_sayisi('deneme olarak yazılan deneme bir sabit metin', 'deneme') "Karakter Sayısı" FROM dual;

Örneklerden de anlaşılacağı gibi sabit bir metin içerisinde ister sadece bir karakter isterse bir kelime araması yapılabilinir.

Kolay gelsin.

ascii,chr ve binary karakter set tablosu

 

Text ASCII Binary
 n/a   chr(0)   00000000 
 n/a   chr(1)   00000001 
 n/a   chr(2)   00000010 
 n/a   chr(3)   00000011 
 n/a   chr(4)   00000100 
 n/a   chr(5)   00000101 
 n/a   chr(6)   00000110 
 n/a   chr(7)   00000111 
 n/a   chr(8)   00001000 
 n/a   chr(9)   00001001 
 n/a   chr(10)   00001010 
 n/a   chr(11)   00001011 
 n/a   chr(12)   00001100 
 n/a   chr(13)   00001101 
 n/a   chr(14)   00001110 
 n/a   chr(15)   00001111 
 n/a   chr(16)   00010000 
 n/a   chr(17)   00010001 
 n/a   chr(18)   00010010 
 n/a   chr(19)   00010011 
 n/a   chr(20)   00010100 
 n/a   chr(21)   00010101 
 n/a   chr(22)   00010110 
 n/a   chr(23)   00010111 
 n/a   chr(24)   00011000 
 n/a   chr(25)   00011001 
 n/a   chr(26)   00011010 
 n/a   chr(27)   00011011 
 n/a   chr(28)   00011100 
 n/a   chr(29)   00011101 
 n/a   chr(30)   00011110 
 n/a   chr(31)   00011111 
 n/a   chr(32)   00100000 
 !   chr(33)   00100001 
 ”   chr(34)   00100010 
 #   chr(35)   00100011 
 $   chr(36)   00100100 
 %   chr(37)   00100101 
 &   chr(38)   00100110 
 ’   chr(39)   00100111 
 (   chr(40)   00101000 
 )   chr(41)   00101001 
 *   chr(42)   00101010 
 +   chr(43)   00101011 
 ,   chr(44)   00101100 
 -   chr(45)   00101101 
 .   chr(46)   00101110 
 /   chr(47)   00101111 
 0   chr(48)   00110000 
 1   chr(49)   00110001 
 2   chr(50)   00110010 
 3   chr(51)   00110011 
 4   chr(52)   00110100 
 5   chr(53)   00110101 
 6   chr(54)   00110110 
 7   chr(55)   00110111 
 8   chr(56)   00111000 
 9   chr(57)   00111001 
 :   chr(58)   00111010 
 ;   chr(59)   00111011 
 <   chr(60)   00111100 
 =   chr(61)   00111101 
 >   chr(62)   00111110 
 ?   chr(63)   00111111 
 @   chr(64)   01000000 
 A   chr(65)   01000001 
 B   chr(66)   01000010 
 C   chr(67)   01000011 
 D   chr(68)   01000100 
 E   chr(69)   01000101 
 F   chr(70)   01000110 
 G   chr(71)   01000111 
 H   chr(72)   01001000 
 I   chr(73)   01001001 
 J   chr(74)   01001010 
 K   chr(75)   01001011 
 L   chr(76)   01001100 
 M   chr(77)   01001101 
 N   chr(78)   01001110 
 O   chr(79)   01001111 
 P   chr(80)   01010000 
 Q   chr(81)   01010001 
 R   chr(82)   01010010 
 S   chr(83)   01010011 
 T   chr(84)   01010100 
 U   chr(85)   01010101 
 V   chr(86)   01010110 
 W   chr(87)   01010111 
 X   chr(88)   01011000 
 Y   chr(89)   01011001 
 Z   chr(90)   01011010 
 [   chr(91)   01011011 
 \   chr(92)   01011100 
 ]   chr(93)   01011101 
 ^   chr(94)   01011110 
 _   chr(95)   01011111 
 `   chr(96)   01100000 
 a   chr(97)   01100001 
 b   chr(98)   01100010 
 c   chr(99)   01100011 
 d   chr(100)   01100100 
 e   chr(101)   01100101 
 f   chr(102)   01100110 
 g   chr(103)   01100111 
 h   chr(104)   01101000 
 i   chr(105)   01101001 
 j   chr(106)   01101010 
 k   chr(107)   01101011 
 l   chr(108)   01101100 
 m   chr(109)   01101101 
 n   chr(110)   01101110 
 o   chr(111)   01101111 
 p   chr(112)   01110000 
 q   chr(113)   01110001 
 r   chr(114)   01110010 
 s   chr(115)   01110011 
 t   chr(116)   01110100 
 u   chr(117)   01110101 
 v   chr(118)   01110110 
 w   chr(119)   01110111 
 x   chr(120)   01111000 
 y   chr(121)   01111001 
 z   chr(122)   01111010 
 {   chr(123)   01111011 
 |   chr(124)   01111100 
 }   chr(125)   01111101 
 ~   chr(126)   01111110 
 n/a   chr(127)   01111111 
Text ASCII Binary
 n/a   chr(127)   01111111 
 €   chr(128)   10000000 
 n/a   chr(129)   10000001 
 ‚   chr(130)   10000010 
 ƒ   chr(131)   10000011 
 „   chr(132)   10000100 
 …   chr(133)   10000101 
 †   chr(134)   10000110 
 ‡   chr(135)   10000111 
 ˆ   chr(136)   10001000 
 ‰   chr(137)   10001001 
 Š   chr(138)   10001010 
 ‹   chr(139)   10001011 
 Œ   chr(140)   10001100 
 n/a   chr(141)   10001101 
 Ž   chr(142)   10001110 
 n/a   chr(143)   10001111 
 n/a   chr(144)   10010000 
 ‘   chr(145)   10010001 
 ’   chr(146)   10010010 
 “   chr(147)   10010011 
 ”   chr(148)   10010100 
 •   chr(149)   10010101 
 –   chr(150)   10010110 
 —   chr(151)   10010111 
 ˜   chr(152)   10011000 
 ™   chr(153)   10011001 
 š   chr(154)   10011010 
 ›   chr(155)   10011011 
 œ   chr(156)   10011100 
 n/a   chr(157)   10011101 
 ž   chr(158)   10011110 
 Ÿ   chr(159)   10011111 
     chr(160)   10100000 
 ¡   chr(161)   10100001 
 ¢   chr(162)   10100010 
 £   chr(163)   10100011 
 ¤   chr(164)   10100100 
 ¥   chr(165)   10100101 
 ¦   chr(166)   10100110 
 §   chr(167)   10100111 
 ¨   chr(168)   10101000 
 ©   chr(169)   10101001 
 ª   chr(170)   10101010 
 «   chr(171)   10101011 
 ¬   chr(172)   10101100 
 ­   chr(173)   10101101 
 ®   chr(174)   10101110 
 ¯   chr(175)   10101111 
 °   chr(176)   10110000 
 ±   chr(177)   10110001 
 ²   chr(178)   10110010 
 ³   chr(179)   10110011 
 ´   chr(180)   10110100 
 µ   chr(181)   10110101 
 ¶   chr(182)   10110110 
 ·   chr(183)   10110111 
 ¸   chr(184)   10111000 
 ¹   chr(185)   10111001 
 º   chr(186)   10111010 
 »   chr(187)   10111011 
 ¼   chr(188)   10111100 
 ½   chr(189)   10111101 
 ¾   chr(190)   10111110 
 ¿   chr(191)   10111111 
 À   chr(192)   11000000 
 Á   chr(193)   11000001 
 Â   chr(194)   11000010 
 Ã   chr(195)   11000011 
 Ä   chr(196)   11000100 
 Å   chr(197)   11000101 
 Æ   chr(198)   11000110 
 Ç   chr(199)   11000111 
 È   chr(200)   11001000 
 É   chr(201)   11001001 
 Ê   chr(202)   11001010 
 Ë   chr(203)   11001011 
 Ì   chr(204)   11001100 
 Í   chr(205)   11001101 
 Î   chr(206)   11001110 
 Ï   chr(207)   11001111 
 Ð   chr(208)   11010000 
 Ñ   chr(209)   11010001 
 Ò   chr(210)   11010010 
 Ó   chr(211)   11010011 
 Ô   chr(212)   11010100 
 Õ   chr(213)   11010101 
 Ö   chr(214)   11010110 
 ×   chr(215)   11010111 
 Ø   chr(216)   11011000 
 Ù   chr(217)   11011001 
 Ú   chr(218)   11011010 
 Û   chr(219)   11011011 
 Ü   chr(220)   11011100 
 Ý   chr(221)   11011101 
 Þ   chr(222)   11011110 
 ß   chr(223)   11011111 
 à   chr(224)   11100000 
 á   chr(225)   11100001 
 â   chr(226)   11100010 
 ã   chr(227)   11100011 
 ä   chr(228)   11100100 
 å   chr(229)   11100101 
 æ   chr(230)   11100110 
 ç   chr(231)   11100111 
 è   chr(232)   11101000 
 é   chr(233)   11101001 
 ê   chr(234)   11101010 
 ë   chr(235)   11101011 
 ì   chr(236)   11101100 
 í   chr(237)   11101101 
 î   chr(238)   11101110 
 ï   chr(239)   11101111 
 ð   chr(240)   11110000 
 ñ   chr(241)   11110001 
 ò   chr(242)   11110010 
 ó   chr(243)   11110011 
 ô   chr(244)   11110100 
 õ   chr(245)   11110101 
 ö   chr(246)   11110110 
 ÷   chr(247)   11110111 
 ø   chr(248)   11111000 
 ù   chr(249)   11111001 
 ú   chr(250)   11111010 
 û   chr(251)   11111011 
 ü   chr(252)   11111100 
 ý   chr(253)   11111101 
 þ   chr(254)   11111110 
 ÿ   chr(255)   11111111 
Categories: Windows Etiketler:, , , , , ,
Takip Et

Get every new post delivered to your Inbox.

Join 62 other followers