DateTime ve DateTime2 Arasında Fark

DateTime2, DateTime veri tipine göre daha yenidir. Sql Server 2008’de karşılaştığımız bu veri türü daha uzun tarih aralıklarını ve salise hassasiyeti olarak daha detaylı veri saklar. Daha yeni olduğundan daha fazla “uyumlu” ve daha fazla “taşınabilir” özelliklere sahip. Ayrıca Microsoft, hem daha yeni hem de daha fazla saniye hassasiyeti sağladığından DateTime yerine DateTime2 kullanılmasını önerir. Ayrıca DateTime2 daha geniş bir tarih aralığına + daha yüksek doğrulukla saniye hassasiyetine + kullanıcı tanımlı saniye hassasiyetine (zorunlu değil) sahiptir. Avantajlarına rağmen mevcut yapıyı değiştirmek bazı matematiksel fonksiyonların çalışmasına engel olabilir. “İşlevsel açıdan farklar” başlığı altında bundan biraz bahsettim. Aşağıda başlıklar halinde farkları açıkladım en altta ise tabloda özet olarak listeledim.

DateTime ve DateTime2 arasındaki kapasite açısından farklar

1)- DateTime kullanmanın geçmişe dönük (1753-01-01 00:00:00) olarak bir sınırlaması var. DateTime’ı çalışırken genellikle kayıt tarihi, loglama veya ileri tarihli işlemler oluşturmak için kullandığımızdan 1753 gibi tarihlere ihtiyaç duymayız. Ancak 01.01.1753 tarihinden geriye gittiğimizde Sql Server bize DateTime2’yi sunuyor (Alternatif olarak eğer sadece zaman olmadan tarih saklayacaksanız Date veri türü de işinizi görecektir).

2)- Hassasiyet açısından fark. DateTime zaman verisini hh:mm:ss:nnn (00:00:00:000) olarak saklarken DateTime2 hh:mm:ss:nnnnnnnnn (23:59:59.9999999) gibi oldukça uzun salise hassasiyetiyle saklayabilir.

DateTime ve DateTime2 arasındaki depolama farkı

DateTime tam 8 byte alan kaplarken DateTime2 hassasiyete bağlı olarak 6, 7 veya 8 byte olarak değişkendir.

DateTime2(n) şeklinde hassasiyet parametresi alabilir. Default değer 7’dir. 1, 2 parametreleri 6 byte, 3, 4 girilirse 7 byte, 5, 6, 7 değerleri de diskte 8 byte kaplar. Yani hassasiyet kapladığı alanla doğru orantılıdır.

DateTime saniye hassasiyetini her zaman yuvarlar
Biz SELECT GETDATE() şeklinde sorguladığımızda sonuçlar her zaman bize DateTime olarak .000, .003 veya .007 saniyelik artışlarla yuvarlanır. Yani aşağıdaki resimdeki 3 sonuçtan birini elde edersiniz.

DateTime ve DateTime2 Arasında Fark
DateTime saniye hassasiyeti

Bu yüzden DateTime ile DateTime 2(3) parametreyi 3 olarak kullanmak rakam sayısı aynı olsa da benzer sonucu vermeyecektir. İlk veri tipinde 8 byte depolama alanından feragat edeceğiz DateTime 2(3) olarak tanımlayınca 7 byte kadar depolama alanı kullanacak.

DateTime ve DateTime 2 veri tipi depolama farkı
DateTime ve DateTime 2 veri tipi depolama farkı

DateTime ve DateTime2 arasındaki işlevsel açıdan farklar

İşlevsel açıdan farklar derken CAST etme, tarih ekleme-çıkarma kullanım durumlarında Datetime 2, DateTime gibi davranmaz. Kullanmaya başladıktan sonra kötü sürprizlerle karşılaşmamak için biraz bunlardan bahsedelim 🙂

+1 olarak işlem yapamıyoruz yani DECLARE DECLARE @ornekDateTime2 DATETIME2 = SYSDATETIME() SELECT @ornekDateTime2 +1 bu şekilde kullanımı Datetime veri tipi desteklerken DateTime 2 desteklemektedir. Bunun için DateAdd metodunu kullanabiliriz.

Halihazırda DateTime tipinde tablolarınız varsa bunları DateTime 2’ye çevirmeden önce uyumsuzlukları gidermek için sorgularınızı, stored procedure, trigger gibi yapılarınızı gözden geçirmenizde fayda var.

Aşağıdaki tabloda DateTime ve DateTime2 sql veri türü arasındaki önemli farkları özetlemektedir.

DateTimeDateTime2
Minimum değer1753-01-01 00:00:000001-01-01 00:00:00
Maksimum değer9999-12-31 23:59:59.9979999-12-31 23:59:59.9999999
Depolama8 byte6,7 veya 8 byte
Doğruluk0,000, 0,003 veya 0,007 saniyelik artışlarla yuvarlanır100 nanosaniye
ParametreAlmaz1-7 arası saniye hassasiyeti alır
Varsayılan değer1900-01-01 00:00:001900-01-01 00:00:00
UyumlulukANSI/ISO uyumlu değildirANSI/ISO uyumludur
KullanımGetDate() metodu DateTime tipinde tarih ve saati döndürür
Örnek: SELECT GETDATE()
Sonuç: 02.10.2023 21:30:15:767
SYSDATETIME() metodu DateTime 2 türünde tarih ve saati döndürür
Örnek: SELECT SYSDATETIME()
Sonuç: 02.10.2023 21:30:15.7673320
DateTime ve DateTime2 arasındaki farkların listesi