SQL UYGULAMALARI - 3
Sql' li geçen güzel günlerin ardından herkese tekrar merhaba. Bu sayımızda, Oracle Sql cümleleri içerisinde, matematiksel ve karakter tabanlı fonksiyonları tanıtacağız. Verilen örnekler Çözüm Programlarında F9 Sql işlemlerinde uygulanmıştır.
MOD
MOD (m, n)
m ifadesinin n ifadesine bölümünden kalan değeri döndürür.
SELECT MOD(18,12) as sayi1, MOD(30,12) as sayi2, MOD(30,30) as sayi3 FROM dual
İfadesi çalıştırıldığında
Sayi1 |
Sayi2 |
Sayi3 |
6 |
6 |
0 |
sonucu elde edilir.
SELECT hs_key, hs_ad, hs_soyad FROM hasta
WHERE MOD(hs_key,
100) = 0< /FONT
>
İfadesi çalıştırıldığında, dosya numarası 100 ve 100' ün katları olan hasta kayıtları listelenir.
hs_key |
hs_ad |
hs_soyad |
100 |
Serdar |
Somuncuoğlu |
200 |
Esra |
Dolaş |
300 |
Hanife |
Ulu |
Dosya numarası tek olan kayıtları (örneğin 1, 3, 5 ...) listelemek için aşağıdaki sql kullanılabilir.
SELECT hs_key, hs_ad, hs_soyad FROM hasta
WHERE MOD(hs_key, 2)=
1
POWER
POWER (m, n)
n tane m ifadesinin çarpımının sonucunu döndürür. m, sıfırdan farklı bir değer olmalıdır. m sıfırdan büyük bir değer ise, n sıfırdan büyük veya küçük olabilir. m sıfırdan küçük bir değer ise, n kesirli bir değer olamaz.
SELECT POWER(10,3) AS sayi1, POWER(10, 3) AS sayi2, POWER(10, 3) AS sayi3 FROM dual
İfadesi çalıştırıldığında
Sayi1 |
Sayi2 |
Sayi3 |
1000 |
-.001 |
-1000 |
sonucu elde edilir.
FLOOR
FLOOR (n)
n ifadesine eşit veya n ifadesinden küçük en büyük tam sayı değeri geri döndürür.
SELECT FLOOR(9.9) AS sayi1, FLOOR(9.9) AS sayi2 FROM dual
İfadesi çalıştırıldığında
Sayi1 |
Sayi2 |
9 |
-10 |
sonucu elde edilir.
CEIL
CEIL (n)
n
ifadesine eşit veya n ifadesinden büyük en küçük değeri geri
döndürür.
SELECT CEIL (10) AS sayi1, CEIL (10.5) AS sayi2, CEIL(10.5) AS sayi3 FROM dual
İfadesi çalıştırıldığında
Sayi1 |
Sayi2 |
Sayi3 |
10 |
11 |
-10 |
sonucu elde edilir.
(Negatif sayılarda 10, 10.5 ten büyüktür.)
ROUND
ROUND (n, m)
n ile verilen ifadenin değerini yuvarlatır. m sayısal olmalıdır ve belirtilme zorunluluğu yoktur. m değeri negatif olduğunda, n ifadesinin ondalık bölümünün solundan itibaren yuvarlatılma yapılır.
SELECT ROUND(123.45) AS sayi1, ROUND(123.45, 1) AS sayi2, ROUND(123.45, 1) AS sayi3 FROM dual
İfadesi çalıştırıldığında
Sayi1 |
Sayi2 |
Sayi3 |
123 |
123.5 |
120 |
sonucu elde edilir.
Hastaların muayene bilgileri HPISLEM tablosunda tutulur. Çıkış zamanları ile giriş zamanları arasındaki saat, dakika ve saniye farkları aşağıdaki sql ifadesi ile bulunabilir.
SELECT ciktarih, girtarih, FLOOR
(((ciktarihgirtarih)*24*60*60)/3600)
|| ' Saat '
||
FLOOR ((((ciktarihgirtarih)*24*60*60)
FLOOR
(((ciktarihgirtarih)*24*60*60)/3600)*3600)/60)
|| ' Dakika '
||
ROUND ((((ciktarihgirtarih)*24*60*60)
FLOOR (((ciktarihgirtarih)*24*60*60)/3600)*3600
(FLOOR((((ciktarihgirtarih)*24*60*60)
FLOOR(((ciktarihgirtarih)*24*60*60)/3600)*3600)/60)*60)))
|| ' Saniye ' as fark
CIKTARIH |
GIRTARIH |
FARK |
02.05.2002 09:56:54 |
01.05.2002 00:28:56 |
33 Saat 27 Dakika 58 Saniye |
02.05.2002 09:54:36 |
01.05.2002 00:58:10 |
32 Saat 56 Dakika 26 Saniye |
01.05.2002 08:33:45 |
01.05.2002 02:43:10 |
5 Saat 50 Dakika 35 Saniye |
TRUNC
TRUNC (n [, m])
n ile belirtilen değerin rakamlarını keser. m değeri belirtilmek zorunda değildir. Belirtildiğinde, negatif veya pozitif olabilir. Negatif değer belirtildiğinde, ondalık bölümün solundaki rakamlar kesilir.
SELECT TRUNC(99.99) AS sayi1, TRUNC(99.99, 1) AS sayi2, TRUNC(99.99, 1) AS sayi3 FROM dual
İfadesi çalıştırıldığında
Sayi1 |
Sayi2 |
Sayi3 |
99 |
99.9 |
90 |
sonucu elde edilir.
sonucu elde edilir.
GREATEST
GREATEST (ifade [, ifade ...])
Belirtilen ifadelerin en büyüğünü geri döndürür. Bu fonksiyon tarih, sayı ve text ifadelerde kullanılabilir. MAX fonksiyonu ile karıştırılmamalıdır.
SELECT GREATEST(1,2,3) AS sonuc FROM dual
İfadesi çalıştırıldığında
Sonuc |
3 |
sonucu elde edilir.
Tek düzen muhasebe hesap planında, muhasebe hesaplarının alacaklı ya da borçlu olduklarını aşağıdaki sql ifadesi ile sorgulayabiliriz.
SELECT hp_ad, DECODE(GREATEST(hp_atut, hp_btut), hp_atut, 'Alacaklı', hp_btut, 'Borçlu', 'Eşit') AS durumu FOM mhesapları
hp_ad |
durumu |
Kasa |
Borçlu |
Alınan Çekler Hesabı |
Alacaklı |
Bankalar |
Borçlu |
LEAST
LEAST (ifade [, ifade ...])
Belirtilen ifadelerin en küçüğünü geri döndürür. Bu fonksiyon tarih, sayı ve text ifadelerde kullanılabilir. MIN fonksiyonu ile karıştırılmamalıdır.
SELECT LEAST (1,2,3) AS sonuc FROM dual
İfadesi çalıştırıldığında
Sonuc |
1 |
sonucu elde edilir.
Çocuk, genç ve yetişkin hastaların cinsiyetlerine göre sayılarını aşağıdaki sql ifadesi ile öğrenebiliriz.
SELECT DECODE(cinsiyet, 'E', 'Erkek', 'K', 'Kadın') as
cinsiyet,
SUM(DECODE(GREATEST (2002TO_CHAR(dogumtarih, 'YYYY'), 41),
LEAST (2002TO_CHAR(dogumtarih, 'YYYY'),100), 1, 0)) " 41100
Yaş",
SUM(DECODE(GREATEST(2002TO_CHAR(dogumtarih,'YYYY'), 13),
LEAST(2002TO_CHAR(dogumtarih, 'YYYY'), 40), 1, 0)) " 1340 Yaş",
SUM(DECODE(GREATEST(2002TO_CHAR(dogumtarih,'YYYY'),0),
LEAST(2002TO_CHAR(dogumtarih, 'YYYY'), 12), 1, 0)) " 012 Yaş"
FROM
hasta
GROUP BY
cinsiyet
* (TO_CHAR(dogumtarih, 'YYYY') ile hastanın doğum tarihinin yıl bilgisi alınır)
CINSIYET |
41-100 Yaş |
13-40 Yaş |
0-12 Yaş |
Erkek |
18.673 |
23.408 |
12.395 |
Kadın |
22.754 |
25.793 |
9.737 |
Karakter Fonksiyonları
CONCAT
CONCAT (ifade1, ifade2)
İfade1 ve ifade2 yi birleştirir. || ile aynı işleve sahiptir.
SELECT CONCAT('Sql ', 'Uygulamaları') AS sonuc1, 'Sql ' || 'Uygulamaları' AS sonuc2 FROM dual
İfadesi çalıştırıldığında
Sonuc1 |
Sonuc2 |
Sql Uygulamaları |
Sql Uygulamaları |
sonucu elde edilir.
INITCAP
INITCAP (ifade)
Verilen ifade içerisindeki tüm kelimelerin ilk harfini büyütür, diğer harflerini küçültür.
SELECT 'sql uYGULAMALARI' as ornek, INITCAP ('sql uYGULAMALARI') AS sonuc FROM dual
İfadesi çalıştırıldığında
Ornek |
Sonuc |
sql uYGULAMALARI |
Sql Uygulamaları |
sonucu elde edilir.
UPPER
UPPER (ifade)
Verilen ifade içerisindeki tüm karakterleri büyütür.
SELECT ‘sql uygulamaları’ as ornek, UPPER ('sql uygulamaları') AS sonuc FROM dual
İfadesi çalıştırıldığında
Ornek |
Sonuc |
sql uygulamaları |
SQL UYGULAMALARI |
sonucu elde edilir.
LOWER
LOWER (ifade)
Verilen ifade içerisindeki tüm karakterleri küçültür.
SELECT 'SQL UYGULAMALARI’ as ornek, LOWER ('SQL UYGULAMALARI’) AS sonuc FROM dual
İfadesi çalıştırıldığında
Ornek |
Sonuc |
SQL UYGULAMALARI |
sql uygulamaları |
sonucu elde edilir.
TRIM
TRIM (karakter FROM ifade)
Verilen ifadenin başındaki ve sonundaki 'karakter' leri siler. Karakter belirtilmediği zaman FROM komutu kullanılmaz, ifadenin başındaki ve sonundaki boşlukları siler.
SELECT ' Sql Uygulamaları ' as ornek, TRIM (' Sql Uygulamaları ') AS sonuc FROM dual
İfadesi çalıştırıldığında
Ornek |
Sonuc |
Sql Uygulamaları |
Sql Uygulamaları |
sonucu elde edilir.
SELECT ‘0009872348900’ as ornek, TRIM (0 FROM 0009872348900) AS sonuc FROM DUAL
İfadesi çalıştırıldığında
Ornek |
Sonuc |
0009872348900 |
987234489 |
Sonucu elde edilir.
Başında veya sonunda boşluk olan servis kodlarını bulmak için aşağıdaki sql kullanılabilir.
SELECT serviskod, servisad FROM servis
WHERE TRIM(serviskod) <>
serviskod
Yukarıdaki sql ifadesinin bir benzeri, hasta adı ve soyadı için kullanılabilir.
SELECT hs_key, hs_ad, trim(hs_ad) as sonuc FROM hasta WHERE TRIM(hs_ad) <> hs_ad
İfadesi çalıştırıldığında
Hs_key |
Hs_ad |
Sonuc |
8613 |
İsmail Vedat |
İsmail Vedat |
13896 |
Ali Kemal |
Ali Kemal |
84507 |
S Handan |
S Handan |
sonucu elde edilir. Sonuçlar incelendiğinde, hasta adı veya soyadının başında veya sonunda boşluk olduğu görülecektir.
LENGTH
LENGTH (ifade)
Verilen ifadenin uzunluğunu döndürür.
SELECT ‘Sql Uygulamaları’ as ornek, LENGTH('Sql Uygulamaları') AS sonuc FROM dual
İfadesi çalıştırıldığında
Ornek |
Sonuc |
Sql Uygulamaları |
16 |
sonucu elde edilir.
En uzun hasta adını bulmak için aşağıdaki sql çalıştırılır.
SELECT hs_ad, length(hs_ad) as uzunluk from hasta where length(hs_ad) = (select max(length(hs_ad)) from hasta)
Hs_ad |
Uzunluk |
Nazile Bebek Erkek |
18 |