İPUCU

Web & Server Güvenliği Doğru web ve veritabanı sunucusu güvenliği sağlanmadan, bilgisayar korsanları hassas verilerinize erişebilir. Web, Sunucu ve veritabanı güvenliğini nasıl sağlayacağınızı buradan öğrenebilirsiniz.

Seçenekler

metin işleme fonksiyonları

19-09-2010 15:58
#1
Üyelik tarihi:
05/2010
Nereden:
FF
Mesajlar:
1.861
Teşekkür (Etti):
102
Teşekkür (Aldı):
463
Konular:
572
Ticaret:
(0) %
Sistem fonksiyonlarından olan tarih ve saat fonksiyonları ele alınacaktır.
Bu makalemizde Tarih-Saat veri tipleri ve bunlarla ilgili T-SQL'in bize sunduğu fonksiyonları inceleyeceğiz. Tarih ve Saat ile ilgili fonksiyonlar ve işlemler belki bazen bizlere biraz karışık gelebilir. Ama aslında onları daha iyi tanıyınca onların hiç de karışık olmadıklarını sizde göreceksiniz. Bu makalede T-SQL 'de Tarih-Saat ile ilgili her şeyi bulacaksınız.
Öncelikle SQL SERVER 'ın bize sunduğu Tarih ve Saat ile ilgili veri tiplerini inceleyelim.
SQL SERVER bizlere tarih ve saat için ayrı ayrı veri tipi vermemiştir. Tarih veya saati aynı veri tipinde saklıyoruz. Ama SQL SERVER Tarih ve Saat veri tipini bizler için ikiye ayırmış. Bunlar DateTime ve SmallDateTime olarak adlandırılır.
1-) DateTime :

Bu veri tipi ile [ 01.01.1753 ] ile [ 31.12.9999 ] arasındaki tarihler kaydedilebilir. Kaydedilen Tarih-Saat verileri saniyenin üç yüzde biri bir kesinlikte saklanabilir. Bu veri tipi için depolama alanı iki adet 4 baytlık tamsayıdır. İlk 4 bayt [ 01.01.1753 ] den sonraki gün sayısı ile tarihi saklar. Sonraki 4 bayt ise gece yarısından sonraki milisaniye sayısı ile saati saklar. Diğer veri tipine göre daha geniş bir zaman dilimini kapsar.
2-) SmallDateTime:

Bu veri tipi ile [ 01.01.1900 ] ile [ 06.06.2079 ] arasındaki tarihler kaydedilebilir. SmallDateTime veri tipi dakikaya kadar kesinliğe sahiptir. Bu veri tipi için depolama alanı iki adet 2 baytlık tamsayıdır. İlk 2 bayt [ 01.01.1900 ] den sonraki gün sayısı ile tarihi saklar. Sonraki 2 bayt ise gece yarısından sonraki dakika sayısı ile saati saklar. Diğer veri tipine göre daha dar bir zaman dilimini kapsar.
Her iki veri tipinde de bir tarih parametresi verilirken , verilen parametreyi aynı metin gibi değerlendirilip tırnak içinde verilmelidir. Örneğin ( Where Tarih = ’01.01.2005’ ) şeklinde olmalıdır. Eğer parametreyi tırnak içinde vermezseniz SQL SERVER bir hata üretip bunu size bildirecektir.
Aslında tarih ve saat işlemlerimizde DateTime veya SmallDatetime veri tipini kullanmak zorunda değiliz. Başka alternatiflerimizde var. Pekala varchar bir alan oluşturup Tarih veya Saat alanı olarak kullanabiliriz. Convert fonksiyonuyla bu alanı istediğimiz yerde istediğimiz şekilde alıp inceleyip güncelleyebiliriz. Bu şekilde DateTime veya SmallDatetime veri türlerinin bize uyguladığı tüm kısıtlamaları da kaldırmış oluruz. Tabi bu konu makalenin kapsamı dışında.
FONKSİYON ADI
FONKSİYON AÇIKLAMASI
CONVERT( Veri Tipi , Tarih )Verilen tarih parametresini istenilen veri tipine dönüştürür veya biçimlendirir.GETDATE()Sistemin o anki Tarih ve Saatini döndürür.GETUTCDATE()O anki UTC Tarih ve Saatini döndürür.DATEPART( Tarih-Saat Kısmı , Tarih )Verilen tarih parametresinin verilen Tarih-Saat Kısmı döndürür.DATENAME( Tarih-Saat Kısmı , Tarih )Verilen tarih parametresinin verilen Tarih-Saat Kısmının adını döndürür.DATEDIFF(Tarih-Saat Kısmı , İlk Tarih , Son Tarih)Verilen tarih parametresinin son tarihi ilk tarihten çıkararak farkını bulur.DAY ( Tarih )Verilen tarih parametresinin gününü döndürür.MONTH ( Tarih )Verilen tarih parametresinin ayını döndürür.YEAR( Tarih )Verilen tarih parametresinin yılını döndürür.Tablo 1: Tarih Fonksiyonları
T-SQL 'de tarih ve saat ile ilgili fonksiyonlarda kullanılmak üzere çeşitli parametreler mevcuttur. Bu parametreler ile fonksiyonlarımızı güçlendirip daha kısa kodlarlar daha etkin işlemler yapabiliriz. Örneğin bu parametreler yardımı ile bir datetime alanının istediğimiz herhangi kısmını alabiliriz veya istediğimiz kısmını dilediğimiz kadar artırıp azaltabiliriz. Aşağıdaki tabloda MS SQL SERVER 2000 Books Online ' da verilen Datetime Fonksiyon parametreleri bulunuyor. Tarih ve Saat ile ilgili fonksiyonları daha etkin kullanabilmek için bu tabloyu iyi bilmemiz gerekir.
TARİH VE SAAT KISIM PARAMETRELERİ
Kısmı Adı
Kısaltması
Aralık
Açıklaması
yearyy, yyyy1753-9999Tarih-Saat alanının yıl kısmını ifade eder.quarterqq, q1-4Tarih-Saat alanının ay kısmının yılın hangi çeyreğinde bulunduğunu ifade eder.monthmm, m1-12Tarih-Saat alanının ay kısmını ifade eder. dayofyeardy, y1-366Tarih-Saat alanının gün kısmının , yılın kaçıncı günü olduğunu ifade ederdaydd, d1-31Tarih-Saat alanının gün kısmının , ayın kaçıncı günü olduğunu ifade eder.weekwk, ww1-53Tarih-Saat alanının gün kısmının , yılın kaçıncı günü olduğunu ifade eder.weekdaydw1-7Tarih-Saat alanının gün kısmının , yılın kaçıncı haftasına dahil olduğunu ifade eder.hourhh0-23Tarih-Saat alanının saat kısmını ifade eder.minutemi, n0-59Tarih-Saat alanının dakika kısmını ifade eder.secondss, s0-59Tarih-Saat alanının saniye kısmını ifade eder.millisecondms0-999Tarih-Saat alanının milisaniye kısmını ifade eder.Tablo 2: Zaman ile ilgili bir çok işlemde kullanılan DATEPARTH fonksiyonu parametreleri
Tarih ve Saat Fonksiyonları


1-) CONVERT ( Veri Tipi [ ( Uzunluk ) ] , Girdi Parametresi [ , Dönüşüm Stili ] )

SQL Server'da iki çeşit veri tipi dönüştürme fonksiyonu vardır bunlar Cast ve Converttir. Bu fonksiyonlar herhangi bir veri tipindeki alanı başka bir veri tipine dönüştürme işlemini gerçekleştirir. Her ikisi de temelde aynı işi yapmaktadırlar ve birçok veri tipi dönüşümünü desteklemektedirler. (Bkz SQL SERVER Books Online 'CAST and CONVERT') Biz bu makalede sadece Convert fonksiyonunun Tarih-Saat işlevlerinden bahsedeceğiz.

Fonksiyonun Parametreleri :
Veri Tipi : Dönüştürülmek istenen veri tipi belirtilir. Eğer istenilirse köşeli parantez içerisinde geriye dönecek değerin karakter uzunluğu belirtilebilir.
Girdi Parametresi : Dönüştürülmek istenen veri belirtilir. Eğer istenilirse köşeli parantez içerisinde SQL SERVER tarafından tanımlanan Tarih-Saat stilleri kullanılabilir.Bu stiller aşağıdaki tabloda belirtilmiştir. Başlığı [Yüzyıl ile] olan stillerde Yıl Kısmı 2005 şeklinde gösterilir. Başlığı [Yüzyılsız] ile olan stillerde Yıl kısmı 05 şeklinde gösterilir.

Tarih ve Saat Dönüşüm Stilleri
Yüzyıl İle
Yüzyılsız
Tarih Formatı
1101mm/dd/yy2102yy.mm.dd3103dd/mm/yy4104dd.mm.yy5105dd-mm-yy6106dd mon yy7107Mon dd , yy8108hh:mm:ss9109Mon dd yyyy Hh:mi:ss:mmm AM yada PM10110mm-dd-yy11111Yy/mm/dd12112Yymmdd13113Dd mm yyy hh:mm:ss:mmm14114Hh:mi:ss:mmm20120Yyyy-mm:dd hh:mm:ss21121Yyy-mm:dd hh:mi:ss:mmmTablo 3:Convert fonksiyonu, tarih formatı dönüşüm parametreleri

Örnek:
SELECT</B> CONVERT(CHAR(50),GETDATE(),103) as "ŞU ANDAKİ TARİH"ŞU ANDAKİ TARİH===============25.07.2005 SELECT CONVERT(CHAR(50),GETDATE(),10 as "ŞU ANDAKİ SAAT"ŞU ANDAKİ SAAT ===============21:46:13 2-) GETDATE() Fonksiyonu

Sistemin o anki tarih ve saatini verir. CONVERT fonksiyonuyla çeşitli şekillerde formatlanabilir.
Örnek
SELECT GETDATE() as "ŞU AN"ŞU AN==================2005-07-25 22:58:29.717 3-) GETUTCDATE()

O anki UTC (Universal Time Coordinate [Evrensel Zaman Koordinatı]) tarih ve saatini verir. Saat şu an Türkiye'de 14:26 iken Paris'te 13:26 'dır. bunun sebebi Türkiye'nin zaman dilimi açısından Paris'ten bir saat sonra gelmesidir. Akla hemen şöyle bir soru gelebilir. O zaman GetUtcDate() 'den elde ettiğim tarih ve saat benim ne işime yarayabilir . Yahoo veya Hotmail gibi dünyaya hizmet veren bir web server'iniz olduğunu düşünün. Ankara ve Paris'ten iki kullanıcı aynı anda kayıt yapsalar bile bu kayıt veritabanına getdate() fonksiyonu ile bir saat farkla kaydedilir. Paris'teki kullanıcının kaydı ankara'daki kullanıcının kaydından bir saat küçük olur. O zaman bu kayıtları değerlendirirken karışıklık çıkmaması için Zaman dilimi ayarları da hesaba katmak gerekir.. Ama GetUtcDate() ile kayıt yapılırsa her iki kullanıcının kaydı da aynı tarih ve saatte kaydedileceği için değerlendirme daha kolay olur. GetUtcDate() ' de CONVERT fonksiyonuyla çeşitli şekillerde formatlanabilir.
SELECT GETUTCDATE() as "ŞU ANDAKİ UTC"ŞU ANDAKİ UTC==================2005-07-26 07:54:02.233 4-) DATEPART( Tarih veya Saat Kısmı , Tarih-Saat )

Tarih-Saat ile ilgili en çok kullanılan fonksiyonlardan birisidir. Bu fonksiyon ile verilen Tarih-Saat parametresini parçalarına ayırıp istediğiniz bir parçasını alabilirsiniz. Mesela ayın kaçıncı günü , yılın kaçıncı ayı , yılın kaçıncı günü gibi bir çok parametresi mevcuttur. Bu parametreler üstte TARİH VE SAAT KISIM PARAMETRELERİ adlı tabloda listelenmiştir.
SELECT DATEPART(wk, '12.31.2005') AS "Yılın Haftası"Yılın Haftası======== 53 SELECT DATEPART(dy, '12.31.2005') AS "Yılın Günü"Yılın Günü======= 365 SELECT DATEPART(dd, GETDATE()) AS "Gün"Gün======= 26 SELECT DATEPART(dd, GETDATE()) AS "Ay"Ay======= 7 5-) DATENAME( Tarih veya Saat Kısmı , Tarih-Saat )

Bu fonksiyon ile , verilen Tarih-Saat parametresinin Ay adını alabilirsiniz tabi ingilizce olarak. Diğer Tarih-Saat kısım parametreleri de verilebilir. Yanlız onları sadece sayı olarak döndürür. Ama isterseniz ay adlarını veya gün adlarını datepart ve case fonksiyonunu kullanarak Türkçe olarak da alabilirsiniz. Tarih-Saat kısım parametreleri üstte TARİH VE SAAT KISIM PARAMETRELERİ adlı tabloda listelenmiştir.
SELECT DATENAME(mm, '12.31.2005') AS "Ay"Ay======== December SELECT DATENAME(mm, getdate()) AS "Bu Ay"Bu Ay======== July Ay İsimlerini Türkçe Almak

Bu işlem için CASE yapısını aşağıdaki şekilde kullanabilirsiniz:
SELECT AY = CASE DATEPART(mm,GETDATE()) WHEN 1 THEN 'OCAK' WHEN 2 THEN 'ŞUBAT' WHEN 3 THEN 'MART' WHEN 4 THEN 'NİSAN' WHEN 5 THEN 'MAYIS' WHEN 6 THEN 'HAZİRAN' WHEN 7 THEN 'TEMMUZ' WHEN 8 THEN 'AĞUSTOS' WHEN 9 THEN 'EYLÜL' WHEN 10 THEN 'EKİM' WHEN 11 THEN 'KASIM' WHEN 12 THEN 'ARALIK' END Ay
=========TEMMUZ
Gün İsimlerini Türkçe Almak

Benzer şekilde gün isimlerini de Türkçe almak aşağıdaki yapı ile mümkündür.
SELECT Gun = CASE DATEPART(dw,GETDATE()) WHEN 1 THEN 'PAZAR' WHEN 2 THEN 'PAZARTESİ' WHEN 3 THEN 'SALI' WHEN 4 THEN 'ÇARŞAMBA' WHEN 5 THEN 'PERŞEMBE' WHEN 6 THEN 'CUMA' WHEN 7 THEN 'CUMARTESİ' END Gun=========SALI6-) DATEDIFF( Tarih veya Saat Kısmı , İlk Tarih-Saat , Son Tarih-Saat )

Son tarih-saatin istenilen Tarih-Saat kısmını ilk tarih-saatin Tarih-Saat kısmından çıkararak istenilen Tarih-Saat kısmının farkını bulur.
SELECT DATEDIFF(dd , '07.01.2005' , '07.31.2005' ) as "Gün Farkı"Gün Farkı======= 30SELECT DATEDIFF(mm , '05.01.2005' , '10.31.2005' ) as "Ay Farkı"Ay Farkı======= 57-) DAY( Tarih-Saat )

Verilen tarihin gün kısmını döndürür. Datepart fonksiyonu da verilen parametre doğrultusunda gün kısmını döndürebilir.Ama Day fonksiyonu başka parametre gerektirmeden sadece gün kısmını döndürür. Dolayısıyla Datepart'a göre sadece gün kısmı gerektiren işlemlerde kullanımı daha kolaydır çünkü başka parametre gerektirmez.
SELECT DAY('11.05.2005') as "Gün"Gün======= 5 8-) MONTH( Tarih-Saat )

Verilen tarihin ay kısmını döndürür. Datepart fonksiyonu da verilen parametre doğrultusunda ay kısmını döndürebilir. Ama MONTH fonksiyonu başka parametre gerektirmeden sadece ay kısmını döndürür. Dolayısıyla Datepart'a göre sadece ay kısmı gerektiren işlemlerde kullanımı daha kolaydır çünkü başka parametre gerektirmez.
SELECT MONTH('11.06.2005') as "Ay"Ay ======= 119-) YEAR( Tarih-Saat )

Verilen tarihin yıl kısmını döndürür. Datepart fonksiyonu da verilen parametre doğrultusunda yıl kısmını döndürebilir.Ama YEAR fonksiyonu başka parametre gerektirmeden sadece yıl kısmını döndürür. Dolayısıyla Datepart'a göre sadece yıl kısmı gerektiren işlemlerde kullanımı daha kolaydır çünkü başka parametre gerektirmez.
SELECT YEAR(GETDATE()) as "Yıl"
ReSRo, Elmino Teşekkür etti.


Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı