Recent comments

İçerik Ara











Yasal Uyarı
Bu sitede sunulan tüm bilgi ve dökümanlar Turgay Sahtiyan tarafından yazılmaktadır. Yazıların kaynak göstermek şartıyla kullanılması serbesttir.

© Copyright 2009-2013
Takvim
<<  November 2014  >>
MoTuWeThFrSaSu
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567
Keywords

Bugün size geçenlerde ihtiyacım olan bir konudan, varchar bir değişken içerisinde bulunan bir varbinary(64) değerin varbinary(64)’e convert edilmesi işleminden bahsedeceğim.

More...

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SQL Server da string ifadeleri saklamak için Char, VarChar, NChar ve NVarChar data tipleri kullanılmaktadır.

Peki hangi durumlarda bu 4 seçenekten hangisini kullanmak daha performanslı bir çözüm olur.

Genel hatlarıyla NChar ve NVarChar data tiplerinin UniCode ifade saklanması planlanan alanlar için kullanılmasında fayda vardır. Çünkü bu data tipler N siz olan versiyonlara göre 2 kat daha fazla yer kaplamaktadır.

VarChar ın Char dan farkı ise; Char,içindeki veri ne olursa olsun belirtildiği n değeri kadar yer kaplarken;varchar,içerisinde belirtildiği string kadar yer kaplar. Dolayısıyla tanımlanan alana girilecek bilgiler çoğunlukla aynı boyutta olacaksa Char kullanmak, farklı boyutta bilgiler girilecekse VarChar kullanmak daha mantıklıdır.

Reel hayattan bir örnek vermek gerekirse; Ad-SoyAd gibi alanlara girilecek bilgiler aynı boyutta olmayacaktır dolayısıyla böyle alanları varchar tanımlamak daha mantıklıdır. Posta Kodu ve Telefon gibi alanlara ise girilecek bilgiler çoğunlukla aynı boyutta olacaktır dolayısıyla bu alanlarıda char olarak tanımlamak daha mantıklı olacaktır.

Örneğin Char(10) diye tanımlanmış bir alana “TEST” ifadesi yazılırsa geri kalan kısma “ ” eklenecek ve reel data aslında “TEST ” şeklinde olacaktır.

Data tiplerinin storage de kapladıkları alanlar şu şekildedir; (n) genişliğinde tanımlama yapıldığı, ve değişkenin içine (l) uzunluğunda bir değer girildiği düşünülürse;

Data Type

(n) Değeri

Storage de Kapladığı Alan

Char (n) (l)

1 – 8000

N

VarChar (n) (l)

1 – 8000

l + 2

NChar (n) (l)

1 – 4000

2 * n

NVarChar (n) (l)

1 – 4000

2*l + 2

 

Örneğin NChar(10) olarak tanımlanmış bir alana “test” string i girilirse bu alan storage de 2*10 = 20 byte lık bir alan kaplayacaktır.

Aynı örnek için;

  • Char -> 10 byte
  • VarChar -> 4+2=6 byte
  • NChar -> 2*10 = 20 byte
  • NVarChar -> 2*4+2=10 byte

Yer kaplayacaktır.

Bu alanları birde Management Studio üzerinde test edip yazımızı sonlandıralım.

Aşağıdaki sql query i Management Studio da çalıştırın.

DECLARE @dt_char char(10)
       ,@dt_varchar varchar(10)
	   ,@dt_nchar nchar(10)
       ,@dt_nvarchar nvarchar(10)
       
SELECT @dt_char = 'TEST'
      ,@dt_varchar = 'TEST'
      ,@dt_nchar = 'TEST'
      ,@dt_nvarchar = 'TEST' 
      
SELECT 'Char' as DataType,DATALENGTH(@dt_char) as Boyut
UNION ALL
SELECT 'VarChar' as DataType,DATALENGTH(@dt_varchar)+2 as Boyut
UNION ALL
SELECT 'NChar' as DataType,DATALENGTH(@dt_nchar) as Boyut
UNION ALL
SELECT 'NVarChar' as DataType,DATALENGTH(@dt_nvarchar)+2 as Boyut

image

Gördüğünüz gibi data tiplerinin kapladıkları alanlar query sonucunda olduğu gibi.

İyi çalışmalar

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar,

Bu yazımda Sql Server 2008 de bulunan Date ve Time veri tiplerini, farklılıklarını ve bazı datetime fonksiyonlarını inceleyeceğiz.

Sql server 2008 ile birlikte Date,Time,DateTime2 gibi yeni veri tipleri gelmekte. Sql Server da bulunan tüm date ve time veri tiplerini görüntülemek için aşağıdaki sql i çalıştırılalım.

select * from sys.systypes where name like '%date%' or name like '%time%'

Bu veri tiplerini kısaca anlatacak olursak;

Date=Tarih tipinden veri saklamaya yarar.01-01-0001 ile 31-12-9999 arasında herhangi bir değeri alabilir.

Time=Saat türünden veri saklamaya yarar. Nano saniye bölümü 7 digitten oluşmaktadır. Burada ek bir bilgi vermem gerekirse; tablo oluştururken time tipinden bir veri tipi seçip nano saniye kısmı için digit ayarlaması yapabilmekteyiz. Time(7) tanımlamasındaki 7 rakamı bize hassasiyeti vermekte. Biz bunu sql server 2000 de olduğu gibi 3 yapabilmekteyiz.

DateTime=Tarih ve saat tipinden veri saklamaya yarar. 01-01-1753 ile 31-12-9999 arasında bir değer alabilir. Aynı zamanda nanosaniye olarak 3 digit i desteklemektedir.

DateTime2= DateTime veri tipinin aynısıdır. Farkı range olarak 01-01-0001 , 31-12-9999 aralığını desteklemesidir. Bir diğer farkıda nanosaniye olarak 7 digit i desteklemektedir.

SmallDateTime = DateTime veri tipinin daha az kapsamlı halidir. Nano saniye bilgisi içermez ve range olarak 01-01-1900 ile 06-06-2079 aralığını destekler.

DateTimeOffSet = İçerisinde UTC bilgisi de olan Tarih-Saat veri tipidir. Örneğin Select SYSDATETIMEOFFSET() sorgusunu çalıştırırsak UTC bilgisi içeren şu sonucu alırız. 2009-08-10 16:26:53.7895439 +03:00

Veri tiplerini karşılaştırmalı olarak şu tablodan inceleyebilirsiniz;

den1

 

Date – Time Fonksiyonları

Sql server 2008 öncesinde date time değerlerini almak için 2 tane fonksiyon vardı. Bunlar GETDATE ve GETUTCDATE fonksiyonları. Sql server 2008 ile beraber 3 yeni fonksiyon daha gelmekte. Bunlar SYSDATETIME, SYSUTCDATETIME ve SYSDATETIMEOFFSET fonksiyonları. Bu fonksiyonlardan SYSDATETIME ve SYSUTCDATETIME, GETDATE ve GETUTCDATE fonksiyonlarının yaptığı işin aynısını yapmakta. Tek farkları nanosaniye kısmındaki 7 digiti destekler yapıları. SYSDATETIMEOFFSET ise bize tarih-saat bilgisinin yanında UTC zaman farkınıda vermekte.

Bu 5 fonksiyon arasındaki farkları görmek için aşağıdaki sorguyu çalıştırabilirsiniz.

select GETDATE(), GETUTCDATE(), SYSDATETIME(), SYSDATETIME(), SYSDATETIMEOFFSET(), SYSUTCDATETIME()

Bir diğer SQL Server 2008 yeniliği olarak datepart fonksiyonuna TZoffset parametresi gelmekte. Biliyorsunuz datepart fonksiyonu ile bir datetime değişkeninin istediğimiz parçasını alabilmekteyiz. TZoffset parametresi ise verilen datetime değişkeninin UTC zaman farkı değerini dakika olarak vermekte. Örneğin Türkiye için konuşursak

select datepart(TZoffset,sysdatetimeoffset())

sorgusu bize 180 değerini verecektir.

Bir diğer fonksiyon ise SWITCHOFFSET fonksiyonu. Bu fonksiyon ile de bir datetime değerinin UTC değerini değiştirebilmekteyiz.

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan