LOGO

LOGO
LOGO
ads header

Breaking News

SQL STRING FONKSİYONLARI


SQL  STRING FONKSİYONLARI
Merhabalar bu makalemizde sıkca kullandığımız Ms Sql string ifadeleri bir araya toplayarak
ne işe yaradıklarını birer örnekle kısaca anlatmak istedim.
Sql tarafında işleri ne kadar iyi çözümlersek yazılım dilleri trafında kodlar o kadar sadeleşiyor ve olası basit değişiklikler söz konusu olduğunda maliyeti oldukca düşürüyor.
LEFT String ifadeden soldan verilen sayı kadarını gösterir.
SELECT LEFT(‘ŞEBNEM FERAH’,3)
Sonuç:ŞEB
RIGHT Stringten sağdan verilen sayı kadarını gösterir.
SELECT RIGHT(‘ŞEBNEM FERAH’,5)
Sonuç:FERAH
LEN Verilen stringin karakter sayısını dönderir. Buna boşluk karakteride dahildir.
SELECT LEN(‘ŞEBNEM FERAH’)
Sonuç:12
UPPER Küçük harfli verilen stringi büyük harflere çevirir.
SELECT UPPER(‘fatih’)
Sonuc: FATİH
LOWER Büyük harfli verilen stringi küçük harflere çevirir.
SELECT LOWER(‘FATİH’)
Sonuç: Fatih
SUBSTRING Verilen stringten parça almak için kullanılır.
Örnekte verilen parametrelere göre 2 den başlayrak 3 tane karakter al demiş olduk.
SELECT SUBSTRING(‘FATİH’,2,3)
Sonuç: ATİ
REPLACE Verilen karakterleri biribiriyle değiştirir
Örnekte MAKİNİST kelimelerini PİLOT olarak değiştir dedimiş olduk
SELECT REPLACE(‘MAKİNİST AHMET’,‘MAKİNİST’,‘PİLOT’)
Sonuç:PİLOT AHMET
STUFF 4 paremetre olarak çalışan bu fonksiyon replace fonksiyonu gibi çalışır ama fark olarak karakter olarak değil verilen indexlere göre değiştirme yapar
SELECT STUFF(‘Audi hh’,5,3,’TT‘)
Sonuç:AudiTT
LTRIM Soldan boşlukları alır
SELECT LTRIM(‘ RAMBO‘)
Sonuç:RAMBO
RTRIM Sağdan boşlukları alır
SELECT RTRIM(‘RAMBO ‘)
Sonuç:RAMBO
REVERSE stringi ters çevirir
SELECT REVERSE(‘RAMBO’)
Sonuç:OBMAR
QUOTENAME Verilen string ifadeyi köşeli parantez [] içine almayı sağlar.
SELECT QUOTENAME (‘SELECT’)
Sonuç:[SELECT]
REPLICATE Verilen string ifadeyi parametre geçilen sayı kadar tekrarlar.
SELECT REPLICATE(‘0‘,10)
Sonuç:0000000000



*******************************************************************************************************
Aşağıda sql de kullanabileceğiniz bazı string foksiyonlar var,

ASCII: Tek bir parametre alır. Parametre olarak göndereceğiniz harf bilgisinin ascii karşılığını verir
SELECT ASCII('A') Sonuç = 49 dur

CHAR : Tek bir parametre alır. Parametre olarak gönderdiğiniz ascii kodunun karakter karşılığını verir.
SELECT CHAR(65) Sonuç = Ar

CHARINDEX: sonuç bir int dir, aramak istediğiniz kelime text in içinde kaçıncı sıradan başlıyor onu verir
SELECT CHARINDEX('fu','ufuk') sonuç 2 dir, 'fu' kelimesi 'ufuk' kelimesi içinde 2 sıradan başlar

DATALENGTH :Herhangi bir veritipi ifadesinin uzunluğunu geri döndürür.
DATALENGTH('12333') sonuç = 5 dir

LEFT: Verilen textin istenilen karekter kadarını sol taraftan alır
LEFT('UfukUygun',5) sonuç = UfukU dur

LEN : Verilen karekterin uzunluğunu verir
LEN('Ufuk') sonuç = 4 dür

REPLICATE : verilen karekter ve adet kadar karekteri stringe ilave eder
'ufuk' + REPLICATE('*' , 4) sonuç = ufuk****

LOWER : Girilen string ifadede ki karekterleri küçük harfe çevirir
select LOWER('ÖÇŞLİÜĞPOO') sonuç = öçşliüğpoo dür

UPPER : Girilen sting ifadede ki tüm karekterleri büyük harfe çevirir
select UPPER('öçşliüğpoo') Sonuç = ÖÇŞLİÜĞPOO dür

LTRIM : metnin solundaki boşlukları alır
LTRIM(' ufuk ') sonuç = 'ufuk '

RTRIM:Metnin sağındaki boşlukları alır
RTRIM(' ufuk ') sonuç = ' ufuk';

TRIM: metnin her iki tarafındaki boşlukları alır
TRIM(' ufuk ') sonuç = 'ufuk'

PATINDEX : M_rs geçenleri arar _ çizgi ile o noktaya gelebilecekler önemli değildir.
SELECT PATINDEX('%M_rs%', 'The stars near Mars are far from ours') sonuç = 16. kelime

QUOTENAME : Verileri Köşeli parantez ([]) içine almaya yarar.

SPACE : BOŞLUK verir
select 'ufuk'+SPACE(3) sonuç 'ufuk ' dür

STUFF : istenilen karaktersen istenilen karaktere kadar silme işlemi yapıyor bunun yanı sıra silinen verinin yerine yeni veride eklenebiliyor.
SELECT STUFF('ufukuygun', 3, 2, 'xxx') sonuç 'ufxxxuygun' dür

RIGHT : Belirtilen karakter uzunluğu kadar sağdan karakter alır.
RIGHT('ufukuygun',3) sonuç = gun

LEFT : Belirtilen karakter uzunluğu kadar soldan karakter alır.
LEFT('ufukuygun',3) sonuç = ufu

REVERSE : Girilen texti tersten yazar
SELECT REVERSE('ufuk') sonuç = 'kufu' dur

REPLECE : Bul ve değiştir
SELECT REPLECE('ufukuygun','u','a') ufukuygun metninin içinde u olanları bul ve a yap
Sonuç : afakaygan

STR : Yuvarlama yapar
SELECT STR(123.556789, 6, 2) başlangıçtan 6 karekter alır ve ondalık hanesi 2 li olacak şekilde yuvarlar
Sonuç = 123.56

SUBSTRING : Bir metinin istenile karekterden sonra kaç karekter alacağını belirtilir
SUBSTRING('ufukuygun',2,6) sonuç 'fukuyg'


*****************************************************************************************************
Faydalı olması umuduyla…

SQL Procedure ile Excel den Sql e Aktarımı

Arkadaşlar bu makalemizde SQL Proc ile excel den sql e SQL veri aktarımını incelicez.
Bir çok konuda oldugu gibi bu konudada bi kaç farklı yöntem uygulanabilir.
Benim ihtiyacım oldudugu bi anda kullandıgım yöntemi sizinle paylşamak istedim.
OPENROWSET teknigini kullanmak için sql serverinizde ikitane servisin aktif halde olmasaı gerekiyor bunlar ‘show advanced options’ ve ‘Ad Hoc Distributed Queries’servisleridir.
Aşagıda gördüğünüz komutları sql çalıştırırak yada Menüden SQL SERVER 2005/Configration Tools altından resimde gödüğünüz gibi tik işaretli olması gerekiyor.
 sp_configure ‘show advanced options’, 1
reconfigure
go
sp_configure ‘Ad Hoc Distributed Queries’, 1
reconfigure
Ayarlarımızı yaprıkdan sonra sıra geldi procderemizi yazamaya
CREATE PROC XLS_AKTARIM
ASDECLARE @KOMUT NVARCHAR(500)
SET @KOMUT=‘SELECT * INTO Sayfa1$ FROM OPENROWSET(”Microsoft.Jet.OLEDB.4.0”,”Excel 8.0;Database=C:\test.xls”, [Sayfa1$])
EXEC( @KOMUT)
Sonuç olarak açıklamamız gerekirse ;
OPENROWSET yöntemini kullanarak Microsoft.Jet.OLEDB.4.0 araçılıgıyla C:\test.xlsyolunda ki excele bağlandık ve sanki tabloymuş gibi Sayfa1 deki verileri okuduk.
Select Into ile Sayfa1$ isminde bir tablo oluşturup içine aktardık.
Burda;
Yöntemimiz: OPENROWSET
Sağlayıcımız :Microsoft.Jet.OLEDB.4.0 (Diğer versiyonlar için değişebilir ben office 2003 kullandım.)
Excel versiyonu: Excel 8.0 (Diğer versiyonlar için değişir uygun olanına bakın)
Kaynak Sayfa : [Sayfa1$] (Diğer sayfalar için [Sayfa2$]… olarak değişir)
Hedef Oluşacak Tablo : Sayfa1$ (Siz istediğiniz ismi verebilirsiniz. Ancak veritabanında bu isim varsa zaten kullanımda diye hata verecektir.)
Siz bunu birazdaha geliştirip excel yolunu ve Sayfa isimlerini parametre olarak yollayıp daha kullanışlı bir hale getirebilirsiniz.
Konunun sade kalabilmesi için ben o kısmına girmedim.
Umarım faydalı olmıştur.

SQL Procedure ile Dinamik TOPN Sorgusu

Arkadaşlar merhaba;
Bir süredir makale yazmıyordum. Tekrardan bir SQL makale ile giriş yapmak istedim.
Bu yazımızda TOPN komutunun Procudureler aracılıgıyla ile parametrik olarak uygulanmasını işleyeceğiz.
Öncelikle kısaca bir sorgu üzerinde TopN komutu nedir ondan bahsedelim.
SELECT TOP 10 * FROM MUSTERILER
Kullanım şekli böyle olan TOP komutu bize ilk 10 kaydı getirir. TOP 100 yazsaydık ilk 100 kaydı getirirdi.
Peki nerede işimize yarar; ilk aklıma gelen sitemize üye olan ilk 10 kişi kimdir? gibi sorulara cevap verir. Sadece 10 kayıt için bütün kayıtları çekmek çok mantıklı olmayacaktır.
İlk 10 (100) kayıt dedik ama bu herhangi bir ordery by komutu kullanılmazsa ASCyani artan sıralama ile çalışır. Bu durumda ilk N kaydı, order by DESC kullanılırsason N kaydı getirir.
Bu kadar bilgiden sonra asıl konumuz olan TOPN komutunu parametrik olarak nasıl alınır sorusunu cevaplayalım.
Önce Proceduremizi yazalım:
CREATE PROC TOPN
@ROWCOUNT NVARCHAR(10),
@SORTING NVARCHAR(10)
AS
DECLARE @KOMUT NVARCHAR(MAX)
SET @KOMUT=‘SELECT TOP ‘+ @ROWCOUNT +‘ * FROM MUSTERI ORDER BY ID ‘+ @SORTING
EXEC (@KOMUT)
Bu kadar olan Procuderemiz iki tane parametre alır.
Birincisi TOP için getirmek istediğiniz kayıt sayısı diğeri ise sıralama yönüdür (ASCveya DESC)
Önceden de bahsettiğim gibi asc kullanırsanız ilk girilen kayıtları desc kullanırsanız son girilen kayıtları getirir.
Query Analyzer da test etmek için
EXEC TOPN 5,‘ASC’
Faydalı olması umuduyla…

SQL CharIndex Kullanımı

Merhaba arkadaşlar;
SQL üzerinde çalışmalarımız devam ediyor. İlerde komplex procudereler yazarken bizlere lazım olabilecek elemanları yavaş yavaş oluşturmaya başladık.
Şimdi sıra CharIndex() kullanımında. Kullanımı çok basit olan CharIndex() adında anladıgımız gibi bir string ifade içinde başka bi string ifade aramak için ve index no yakalamak için kullanılır.
Hemen bir örnek verecek olursak
SELECT CharIndex(‘a’,’fatih’)
Eğer aranan karakter( yada karakterler) bulunursa index no, bulunamazsa da 0 dönecektir.
Bu örneğe göre dönecek olan değerimiz dönecek olan değerimiz 2 dir.
(Eğer birden fazla yerde bulunursa ilk bulunan index dönecektir…)
C# VB.NET vs. diller tarafında butür indexlemeler 0 dan başlar ama SQL de direk 1 den başladıgını farketmişsinizdir. Yani bu işlemi .net tarafında karşılıgını yapmış olsaydık dönecek değer 1 oludu.
Biraz daha detaylı bir örnek verecek olursak
DECLARE @returnValue int
SELECT @returnValue=CHARINDEX(‘a’,’ADANA’)
IF(@returnValue=0)
print ‘Aranılan Karakteri içermiyor…’
ELSE
print ‘Karakter Index=’+ Convert(varchar(10),@returnValue)
SELECT PATINDEX(‘%T%’,’FATİH’) <– aynı amaca hizmet eder…
Artık lazım olması durumunda nasıl kullanılacagını biliyoruz. Bir süre daha T-SQL üzerine gitmeyi planlanlıyorum.

Şimdilik hoşcakalın…

SQL Trigger (Tetikleyici) Kullanımı

Merhabalar;
T-SQL üzerine gitmeye devam ediyoruz.
Bugün ki konumuz TRIGGER kullanımı.
Sql de veri tutarlıgını sağlamak ve işlemleri otomatikleştirmek amacıyla kullanılan bir yapıdır Trigger.
Kelime anlamı Tetikleyici olan Trigger adına yakışır aynı güzellikde hareket etmektedir ataması yapılan tablodaki hareketleri takip ederek otomatik olarak çalışır.
Triggerler aslında Procudurelerin daha da fonksiyonelleştirilmiş halidir.
Ataması yapılan tabloda INSERT,DELETE,UPDATE olmak
üzere 3 farklı trigger kullanılabilir. SELECT işleminde kayıtlarda değişiklik olmadıgı için çalışmaz. Ayrıca CreateAlterDrop işlemlerinde de çalışmaz.Bunların dışında View,Temp_table ler de de Trigger kullanılamaz.
Önemli husus daha var Triggerlere dışardan Parametre yollanamaz.
Tabloların maruz kaldıkları işlemlere göre trigerler geçici tablolar oluştururlar bunlar DELETE işlemi için DELETED, INSERT işlemi için INSERTED dir. Bunlar çalışma anında oluşturulur ve işlem biter bitmez silinir. Daha sonra oluşmanız münkün değildir. Burda UPDATE değinilmedigini biliyorum UPDATED diye bi tablomuz yok.Updateleri yakalamak için hem DELETED hemde INSERTED tablosundan faydalanacagız onun için ayrıca ögner yazacagım.
Aşagıda ki Trigerimizde STOK ve STOK2 adında 2 tablomuz var. Şuan için pek mantıklı bir işlemiş gibi görünsede STOK tablosundan sildigimiz kayıtları bir yerde saklama geregi duyabiliriz ve örnekler çogaltılabilir. İşde Trigerimizde bu amaca hizmet etmekte.
ALTER TRIGGER DENEME_TRIGGER –Trigerimiz tanımladık
ON STOK –hangi tabloda çalışacak
FOR DELETE –hangi işlem için (FOR INSERT,DELETE,UPDATE aynı anda olabilir)AS
INSERT INTO STOK2 (KODU,ADI,BIRIMREF) SELECT KODU,ADI,BIRIMREF FROM DELETED

Giriş seviyesi için sanırım bu örnek yeterli daha sonra farklı örneklerle detaya inecegiz.
Şimdilik hoşcakalın…

CURSOR KULLANIMI

Merhabalar Sql başlıca kullanılan işlemlerden biride Cursor ler dir.
Cursor ler kayıt kümesi üzerinde satır satır hareket etmemizi sağlar.
Nisbeten performans gerektiren bir işlem oldugundan dikkatli kullanılmasında fayda var.
Bu cursor blogunu herhangi procedure içinde rahatca kullanabiliriz.
Yaptıgı işlem ise bi tablodan çektigi verileri diger bi taboya insert yapıyor.
“ee zaten bunu cursor kullanmadan da yapabilirim hemde daha kısa ve kolay…” diyen arkadaşlarım olabilir, biliyoruz bunun çok çok faklı yollarıda var burda asıl amaç Cursor yazımını kavramak.
declare @code varchar(11)
declare @unvani nvarchar(50)
DECLARE DENEME_CURSOR CURSOR FOR — cursor umuzu tanımlıyoruz
SELECT CODE, DEFINITION_ FROM CL
OPEN DENEME_CURSOR –kullanıma açtık
FETCH NEXT FROM DENEME_CURSOR INTO @code, @unvani
WHILE @@FETCH_STATUS-1 –kayıtlar üzerinde hareket etmeye başladıkBEGIN
insert into CLC Values(@code,@unvani)
 –insert yapıyoruz…
FETCH NEXT FROM DENEME_CURSOR INTO @code, @unvani
END
CLOSE DENEME_CURSOR — işi biten cursor kapatılmalıDEALLOCATE DENEME_CURSOR –Bellekde haliyle yer kaplayacagı için cursor le ilgili herşeyi temizledik…
CURSOR kullanımı oldukca kolay ve keyflidir. Artık cursor mantıgını ve yazımını kavradıgımız için gerekli hallerde hemen devreye sokarak işlerimi halledebiliriz.
Bir süre daha T-SQL üzerine gidecegim. Adım adım ilerleyerek en sonlarında senaryolarla ögrendigimiz konuları pekiştirmeyi hedefliyorum.
Bir sonra ki yazmızda görüşmek üzere hoşçakalın…

SQL ISNULL() Kullanımı

SQL de degerlerin boş olup olmama durumlarını kontrol etmemiz gerekebilir. Sorgudan dönen deger matematiksel bir işlem sokuluyorsa hata verecektir. Kullanım sebebleri çogaltalabiliriz
Kullanımı: isnull(alanadı,‘null sa’) —isnull(ADI,‘ismiyok’) ADI alanı null sa yerineismiyok yazar
Konunun mantıgını anladık şimdi örneklere geçelim.
SELECT (ISNULL(MAAS,1)*1.10) AS ZAMLI FROM YMusteri
SELECT ISNULL(LAST_NAME,‘–‘AS CDG FROM CustomerInfo
Daha sorgular konusunda çok yolumuz var bir adım daha atmış olduk.

SQL Select Case When Kullanımı

Merhabalar;

Bir çogumuz sql sorgularında dönen kayıtlar üzerinde seçim işlemi

yapma geregi duymuşuzdur. Cinsiyet alanına kadın / erkek yazdırmak yerine litaratürde gösterilen şekliyle .T. / .F. yada 0/1 gibi kodlamalar kullanırız. 0 ise kadın 1 ise erkek olarak göster dememiz lazım. Bunun en pratik yolu yazdıgımız programlama dilini kullanmadan sql in kendine yaptırmaktır. Sorgumuzu görünce ne demek istedigimi daha iyi anlayacaksınız.

Hadi ozaman buyrun.
Genel yapısı :
SELECT KolonBaslıgı =

CASE SecilecekALAN

WHEN ‘D’ THEN ‘DÜŞÜNCE’

WHEN ‘E’ THEN ‘EGLENCE’

WHEN ‘R’ THEN ‘RENK’

WHEN ‘Y’ THEN ‘YAŞAM’

WHEN ‘A’ THEN ‘AMAÇ’

ELSE ‘Yoksa Neye Yarar Dünya ‘

END, DigerAlanlar

FROM TabloAdı
Genel kullanımını bu şekilde gösterdikten sonra isterseniz bi kaç farklı örnek yapalım.
Müşteri tiplerini kodlara ayırdık. Hangi müşteri hangi statüde bilmek istiyoruz ve yazılım aşamasında verdiğimiz kodların hangisinin hangi manada oldugunu göstermek istiyoruz.
SELECT MUSTIPI=

CASE TIPI

WHEN ‘1’ THEN ‘ÜST DÜZEY’WHEN ‘2’ THEN ‘ORTA DÜZEY’WHEN ‘3’ THEN ‘ALT DÜZEY’

ELSE ‘BELİRSİZ MÜŞTERİ TİPİ’

END,ADI As MUSTERI

FROM Musteri
Burda yaptıgımız işlemde sorgu çektik müşterilerin tamamı için müşteri kodlarına baktık 1 ise bunu yaz 2 ise bunu yaz.
SONUÇ:



MUSTIPI MUSTERI

———- ———–

‘ORTA DÜZEY’ FATİH

‘ORTA DÜZEY’ MEHMET

‘ÜST DÜZEY’ SEDA

‘ORTA DÜZEY’ EDA
Diğer bir kullanım şekli;



SELECT CASE

WHEN BAKIYE=0 THEN ‘RİSK YOK’

WHEN BAKIYE>1 AND BAKIYE <'2' THEN ‘DÜŞÜK RİSK’ 

WHEN BAKIYE>=2 AND BAKIYE<'3' THEN ‘ORTA SEVİYELİ RİSK’WHEN BAKIYE>3 OR BAKIYE=3 THEN ‘YÜKSEK RİSK’

WHEN BAKIYE BETWEEN 4 AND 10 THEN ‘ÇOK YÜKSEK RİSK’

END, m.SOYADI, ym.BAKIYE

FROM Musteri AS m INNER JOINYMusteri AS ym ON m.ID = ym.M_ID
Başka bir örnek kullanabileceginiz bi çok komut var…
SELECT

CASE

WHEN TIPI IS NULL THEN ‘HERHANGI MUSTERİ TIPI’

END AS TIP ………

Hiç yorum yok