Kategori arşivi: sql

SQL Rehberi – Hazır Fonksiyonlar – 1

SQL’de işlemlerimizi daha kolay yapmamamızı sağlayan birçok fonksiyon bulunmaktadır. Çoğu zaman lazım olan bu fonksiyonları tek tek açıklamaya çalışacağım. Umarım faydalı olur.

ascii()

Açıklama: Girilen karakterlerin en solundakinin ascii numarsını döndürür.

Yazılış: int = ASCII ( karakter_girişi )

Örnek:

select ascii(‘ABC’) — 65
select ascii(‘A’) — 65
select ascii(‘Z’) — 65
select ascii(‘a’) — 97
select ascii(‘z’) — 122
select ascii(’0′) — 48
select ascii(’9′) — 57
select ascii(‘_’) — 95
select ascii(‘ ‘) — 32

char()

Açıklama: Girilen sayının ascii karakter karşılığını döndürür.

Yazılış: char= CHAR ( sayı )

Örnek:

select char(ascii(‘A’))  — A
select char(65)  — A
select char(145) — Sol tek tırnak: ‘
select char(146) — Sağ tek tırnak: ’

Not:

SQL: char(13) = satır başı, char(10) = satır atlama.
VB’deki: ‘vbCrLf’ veya Javascript/c#’daki \n gibi
Örnek:
Print ‘Kod listesi: ‘ + char(13) + char(10) + ‘A = Selam 1′ + char(13) + char(10) + ‘B = Selam 2′

Sonuç:

Kod listesi:
A = Selam 1
B = Selam 2

select nchar(65) — A
select unicode(‘A’) — 65

SQL’de ascii listesi almak için aşağıdaki komutu kullanabiliriz:

declare @strValue varchar(255)
declare @intCount int
declare @intCountMax int
set @intCount = 0
set @intCountMax = 255
forloop_begin:
  set @strValue = (select (convert(varchar(15),@intCount) + '-' + char( @intCount ) ))
  print @strValue
  set @intCount = @intCount + 1
  if ( @intCount <= @intCountMax ) begin
    goto forloop_begin
  end
forloop_end:

charindex()

Açıklama: girdiğimiz yazının içinden belirlediğimiz kısmın başlangıç karakterini döndürür, eğer yoksa 0 döner.

Yazılış: int = CHARINDEX ( expression1 , expression2 [ , start_location ] )

expression1 – Aranılacak olan text
expression2 – içinde arama yapılacak text.
Start_location = 0 veya negatif = başlangıç.

Örnek :
select charindex( ‘Selam’, ‘Yeniden Selam Herkese’)  — 7
select charindex( ‘/’, ‘http://www.ftorun.com/’,8) — 22

difference()

Açıklama: iki soundex değerini karşılaştırıp 1 – 4 arasında bir numara dödürür. Birbirlerine olan benzerliklerine göre 4′e yakın bir değer verir.

Soundex nedir: Bir kelimeden fonetik bir kod cikarma yontemidir. SQL’de SOUNDEX() komutu ile verdiğimizde bize 4 haneli soundex değeri, difference ise iki soundex degerini kiyaslayarak iki kelimenin birbirine ne kadar yakin okundugunu cikarilabilir.

Yazılış:

int = DIFFERENCE ( yazi_1 , yazi_2 )

Örnek:

SELECT SOUNDEX(‘Hello’) — H400
select DIFFERENCE(‘Hello’,'Hello’) — 4

SELECT SOUNDEX(‘ankara’) — A526
select DIFFERENCE(‘ankara’,'ankara’) — 4

SELECT SOUNDEX(‘ali’) — A400
SELECT SOUNDEX(‘veli’) — V400
select DIFFERENCE(‘ali’,'veli’) — 3

SELECT SOUNDEX(‘abcdefg’) — A123
SELECT SOUNDEX(‘tuvwxyz’) — T122
select DIFFERENCE(‘abcdefg’,'tuvwxyz’) — 2  (1 "1" + 1 "2" = 2)

SELECT SOUNDEX(‘dog’) — D200
SELECT SOUNDEX(‘dot’) — D300
select DIFFERENCE(‘dog’,'dot’) — 3  (1 "D" ve 2 "0" = 3)

select SOUNDEX(‘hakan’) — H250
select SOUNDEX(‘melih’) — M400
select DIFFERENCE(‘hakan’,'melih’) — 1  (Soundex değerlerinden sadece sondaki 0 aynı olduğu için 1.)

–Soundex değerlerinin hepsi aynıysa geriye 4 döner.
select SOUNDEX(’1′) — 0000
select SOUNDEX(’2′) — 0000
select SOUNDEX(’20′) — 0000
select SOUNDEX(’100′) — 0000
select DIFFERENCE(’1′,’2′) — 4
select DIFFERENCE(’20′,’100′) — 4

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

SQL’de subquery’lerde sadece 1 çıktı alınması gereken yerde, birden fazla veri listelenirse bu hatayı verir.

örnek:

USE Northwind
SELECT t1.*  FROM dbo.Orders t1
WHERE t1.OrderDate =  

(SELECT MAX(OrderDate), CustomerID FROM dbo.Orders WHERE t1.CustomerID = CustomerID GROUP BY CustomerID)

Burada t1.OrderDate’e 1 sonuç vermemiz gerekirken altsorgumuzdan 2 değer dönmektedir, bu sorunu çözmek için

USE Northwind
SELECT t1.* FROM dbo.Orders t1
WHERE t1.OrderDate =
  (SELECT MAX(OrderDate) FROM dbo.Orders WHERE t1.CustomerID = CustomerID)

Maximum OrderDate in yanındaki CustomerID’yi sildiğimizin için bu sorgu hata vermeyecektir.

SQL’de önceki ve sonraki kayıt

SQL de önceki ve sonraki kaydı bulmak için hazır bir komut yok ama bunun için şu komutları kullanabiliriz.

id name
17 kayit1
42 kayit2
9 kayit3
77 kayit4
65 kayit5

SELECT top 1 name FROM db where id<42 order by id desc  --42 den önceki 
SELECT top 1 name FROM db where id>42 order by id --42 den sonraki