SQL FONKSİYONLARI
SQL Server'da Fonksiyonlar, hesaplamalarda ve özellikle sistem hakkında bilgi almada yaygın olarak kullanılan araçlardır. Transact-SQL (T-SQL) programlama dilinde değişik kategorilerle adlandırılan fonksiyonlar vardır. Bunlardan en yaygını veriler üzerinde işlem yapan toplama ya da gruplama olarak adlandırabileceğimiz aggregate fonksiyonlarıdır.
Gruplama (aggregate) fonksiyonları bir dizi değer üzerinde hesaplama yaparlar ve bir sonuç değer döndürürler. Toplama ya da gruplama fonksiyonları olarak adlandırabileceğimiz bu fonksiyonlar genellikle GROUP BY deyimi ile kullanılırlar.
Gruplama fonksiyonları aşağıdaki ifadeler içinde kullanılabilirler.
· SELECT deyiminin listesinden (bir subquery olarak)
· Bir COMPUTE ya da COMPUTE BY sözcüğü ile.
· Bir HAVING sözcüğü ile.
Transact-SQL programlama dilinde şu aggregate fonksiyonları kullanılır:
· AVG
· COUNT
· GROUPING
· MAX
· MIN
· SUM
· STDEV
· STDEVP
· VAR
· VARP
NOT: Bu dokümanlar Faruk Çubukçu tarafından hazırlanmıştır. Bütün hakları saklıdır. Ticari olarak kullanılamaz. Bakınız:
www.farukcubukcu.com
Adı geçen ve telif haklı olan ürünler bilgi amaçlı olarak kullanılmıştır.
Bir grup içindeki değerlerin ortalamasını döndürür. Null değerler dikkate alınmaz.
Kullanım Biçimi:
AVG([ALL | DISTINCT] ifade)
Argümanları:
ALL
Ortalama fonksiyonunu bütün değerlere uygular.
DISTINCT
İşlemin her tek değer için uygulanacağını belirtir. Diğer bir deyişle tekrar eden değerlerin yerine birisi kullanılır.
ifade
Sayısal bir değeri olan ifade ya da kolon adı.
Örnek:
Aşağıdaki örnekte satış miktarları toplanmakta ve ortalaması alınarak iki ayrı sonuç değeri verilmektedir:
USE Northwind
GO
SELECT AVG(quantity), SUM(quantity)
FROM [OrderDetails]
GO
Bir grup içindeki eleman sayısını verir.
Kullanım Biçimi:
COUNT({[ALL | DISTINCT] ifade] | *})
Argümanları:
ALL
Fonksiyonunu bütün değerlere uygular.
DISTINCT
İşlemin her tek değer için uygulanacağını belirtir. Diğer bir deyişle tekrar eden değerlerin yerine birisi kullanılır.
ifade
Bir ifade ya da kolon adı.
*
Bir tablodaki bütün satırların sayısını döndürmek için kullanılır. COUNT(*) herhangi bir paratmetre ile kullanılmaz ve DISTINCT ile kullanılmaz.
COUNT(*) ile null ve tekrar eden değerler dahil bütün elemanlar sayılır.
Örnek:
Aşağıdaki örnekte ürünler tablosundaki ürünler sayılır. DISTINCT ile tekrara izin verilmez.
USE Northwind
GO
SELECT COUNT(DISTINCT productname)
FROM products
GO
İfade içindeki maksimum değeri döndürür.
Kullanım Biçimi:
MAX([ALL | DISTINCT] ifade)
Argümanları:
ALL
Fonskiyonunu bütün değerlere uygular.
İfade içindeki minimum değeri döndürür.
Kullanım Biçimi:
MIN([ALL | DISTINCT] ifade)
Argümanları:
ALL
Fonskiyonunu bütün değerlere uygular.
Örnek:
Aşağıdaki örnekte en küçük satış adedi elde edilmektedir:
USE Northwind
GO
SELECT MIN(quantity)
FROM [OrderDetails]
GO
Değerlerin toplamlarını verir. SUM fonksiyonu sadece sayısal alanlarda kullanılır.
Kullanım Biçimi:
SUM ([ALL | DISTINCT] ifade)
Argümanları:
ALL
Toplama (aggregate) fonksiyonunu bütün değerlere uygular. ALL seçeneği varsayım olarak kullanılır.
DISTINCT
SUM fonksiyonunu tek değerlerin (unique) toplamını vermesini sağlar.
İfade
Bir sabit, bir kolon, fonksiyon ya da bir aritmetik işlem.
Örnek:
USE pubs
GO
-- Satır toplamları
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance) BY type
Bu fonksiyonlar tarih (date) ve zaman (time) üzerinde işlemler yapmayı sağlar. Tarih ve zaman fonksiyonları şunlardır:
· DATEADD
· DATEDIFF
· DATENAME
· DATEPART
· DAY
· GETDATE
· MONTH
· YEAR
· CONVERT
DATEADD
Belli bir tarihin üzerine değer eklenerek yeni bir tarih değeri üretir.
Kullanım biçimi:
DATEADD ( tarihkısmı, sayı, tarih)
Argümanları:
Tarih kısmı
Tarih Parçası
|
Kısaltması
|
Year
|
yy, yyyy
|
Quarter
|
qq, q
|
Month
|
mm, m
|
Dayofyear
|
dy, y
|
Day
|
dd, d
|
Week
|
wk, ww
|
Hour
|
hh
|
Minute
|
mi, n
|
Second
|
ss, s
|
Millisecond
|
ms
|
sayı
Tarih kısmını artırmak için kullanılan değer.
tarih
Tarih değerini döndüren tarih bilgidi.
Örnekler:
Yayın tarihinin 30 gün sonrası:
USE pubs
GO
SELECT
DATEADD(day, 30,
pubdate)
FROM titles
GO
Örnek: Son on gün içinde yapılan siparişler:
SELECT ord_num, ord_date
FROM sales
WHERE
(ord_date >=
DATEADD(day, -10, GETDATE()))
DATEDIFF
İki tarih arasındaki gün sayısını verir.
Kullanımı:
DATEDIFF ( Tarih parçası, başlangıç tarihi, bitiş tarihi)
Argümanları:
Tarih parçası
Tarih Parçası
|
Kısaltması
|
Year
|
yy, yyyy
|
Quarter
|
qq, q
|
Month
|
mm, m
|
Dayofyear
|
dy, y
|
Day
|
dd, d
|
Week
|
wk, ww
|
Hour
|
hh
|
Minute
|
mi, n
|
Second
|
ss, s
|
millisecond
|
Ms
|
Örnek: Şu anki tarih ile yayın tarihi arasındaki fark:
USE pubs
GO
SELECT
DATEDIFF(day,
pubdate,
getdate())
FROM titles
GO
DATEPART (T-SQL)
Belirtilen tarihin istenen parçasına karşılık olarak bir tamsayı döndürür.
Kullanım Biçimi:
DATEPART(tarihparçası, tarih)
Argümanları:
Tarih parçası
Tarih bilgisinin bir kısmını ifade eden bilgi.
Tarih bölümü
|
Kısaltma
|
year
|
yy, yyyy
|
quarter
|
qq, q
|
month
|
mm, m
|
dayofyear
|
dy, y
|
day
|
dd, d
|
week
|
wk, ww
|
weekday
|
Dw
|
hour
|
Hh
|
minute
|
mi, n
|
second
|
ss, s
|
millisecond
|
Ms
|
Örnek:
Aşağıdaki örnekte şu anki tarihin karşılık geldiği ay adı ve ay numarası bulunmaktadır:
SELECT GETDATE()
Tarihi verir:
SELECT DATEPART(month, GETDATE())
Ayı verir:
DAY (T-SQL)
Bir tarih bilgisinin gün kısmını verir.
Kullanım Biçimi:
DAY(tarih)
Argümanları:
tarih
datetime ya da smalldatetime tarih bilgisi.
Aşağıdaki örnekte verilen tarihin gün kısmı verilmektedir:
SELECT DAY('26/03/1999') AS 'Gün'
GO
Sonuç:
Gün
------------
26
MONTH (T-SQL)
Bir tarih bilgisinin ay kısmını verir.
Kullanım Biçimi:
MONTH(tarih)
Argümanları:
tarih
datetime ya da smalldatetime tarih bilgisi.
Aşağıdaki örnekte verilen tarihin ay kısmı verilmektedir:
SELECT MONTH('26/03/1999') AS 'Ay'
GO
Sonuç:
Ay
------------
03
YEAR (T-SQL)
Bir tarih bilgisinin yıl kısmını verir.
Kullanım Biçimi:
YEAR(tarih)
Argümanları:
tarih
D. KARAKER FONKSİYONLARI
String (karakter) alanları işlemek için yaygın kullandığımız fonksiyonlar bu alana girer. Transact-SQL dilinde kullanılan bazı karakter fonksiyonları şunlardır:
- ASCII
- CHAR
- CHARINDEX
- DIFFERENCE
- LEFT
- LEN
- LOWER
- LTRIM
- NCHAR
- REPLICATE
- REVERSE
- SUBSTRING
- QUOTENAME
- STUFF
- REPLACE
- STR
- SOUNDEX
- PATINDEX
- SPACE
- RIGHT
- RTRIM
- UPPER
- UNICODE
ASCII
Bir karakter ifadenin en soldaki değerinin ASCII kodunu döndürür.
Kullanımı:
ASCII ( karakter ifade)
Karekter ifade char ya da varchar türündedir.
Döndürdüğü tür: Int
Örnek:
Bizim Ev cümlesinin bütün karakterlerinin ASCII değerini döndürür:
SET TEXTSIZE 0
SET NOCOUNT ON
--
değişkenoluştur.
DECLARE @
konumint, @
karakterchar(15)
--
değişkenlere ilk
değerver.
SET @
konum= 1
SET @
karakter= '
BizimEv'
WHILE @
konum<=
DATALENGTH(@
karakter)
BEGIN
SELECT
ASCII(SUBSTRING(@
karakter, @
konum, 1)),
CHAR(ASCII(SUBSTRING(@
karakter, @
konum, 1)))
SET @
konum= @
konum + 1
END
SET NOCOUNT OFF
GO
CHARINDEX
Bir karakter dize içinde belirtilen bir ifadenin (karakterin) başlangıç konumunu döndürür.
Kullanımı:
CHARINDEX ( ifade1, ifade2[ , başlangıç konumu] )
İfade1: aranacak karakterleri belirtir.
İfade2: İfade1'deki karakterlerin aranacağı karakterleri belirtir.
Başlangıç konumu ise aramanın başlanacağı konumu belirtir.
Döndürdüğü tür: Int
İfadelerden birisi NULL ise CHARINDEX fonksiyonu NULL değerini döndürür. İfade1, İfade2 içinde bulunamazda 0 değeri döner.
Örnek: ADI alanında BOYASI sözcüğünün başladığı konumu döndürür.
SELECT
CHARINDEX('BOYASI',
adi)
FROM urun
--
aramaiçinbaşlangıkçkonumubelirtmekistersek
SELECT
CHARINDEX('BOYASI',
adi, 5)
FROM urun
Yalnızca adlar listesi:
select left (adi,charindex(' ', adi)) from cariana
LEFT
Bir karakter dizesinin sol taraftan belirtilen sayı kadar keser.
Kullanımı:
LEFT ( karakter dize, tarmsayı)
Örnek: Adların soldan beş karakteri:
USE
ornek
GO
SELECT
LEFT(adi, 5)
FROM
cariana
ORDER BY
kodu
GO
LEN
Dize verinin uzunluğunu döndürür.
Kullanımı:
LEN ( karakter dize)
Örnek: Adı alanının uzunluğu:
SELECT
LEN(adi) AS '
Uzunluk'
FROM
cariana
use ornek
select substring (adi,charindex(' ',adi)+1,(len(adi)-charindex(' ',adi))) from cariana
-- soyadını ayırmak
LTRIM
Önündeki boşlukları siler.
Kullanımı:
LTRIM ( karakter dize)
RIGHT
Belirtilen dizenin sağ tarafından keser.
Kullanımı:
RIGHT ( karakter dizesi, tamsayı)
Arguments
Örnek:
Adı alanını sağlan 10 karakteri:
SELECT
RIGHT(adi, 10)
FROM
cariana
RTRIM
Karakter dizesinin arkasındaki boşlukları kaldırır.
Kullanımı:
RTRIM ( karakter dize)
Örnek: Bir alan güncelleme:
update deneme
set alan1 = rtrim(alan1) + rtrim('a')
STUFF
Belirtilen uzunluktaki karakterleri siler ve yerine belirtilen diğer karakterleri ekler.
Syntax
STUFF ( karaker dize, başlangıç, uzunluk, karakter dize)
Örnek:
use
ornek
SELECT
STUFF(tel, 7, 1, '8') from
cariana
-- telefon numarasında 7 karakteri 9 ile değiştirmek
SUBSTRING
Bir karakter dizesinin içinden belli karakterleri seçer.
Kullanımı:
SUBSTRING ( karakter dize, başlangıç, uzunluk)
Örnek:
Adı alanının içinde üçüncü karakter başlayım 4 tane karakteri döndürmek:
SELECT
SUBSTRING(adi, 3, 4)
FROM
cariana
Adı
soyadıalanındansoyadınıçekmek:
select substring (
adi,charindex(' ',
adi)+1,(
len(
adi)-
charindex(' ',
adi))) from
cariana
GÖZDEN GEÇİRME
1. SQL Dili fonksiyonlarının sınıflarını açıklayınız.
2. Bir alanın soldan üç karakterini seçmek için hangi fonksiyonları kullanabiliriz.