SQL Server 2008’de date ve time bilgilerini ayrı tiplerde tutmanız mümkün.
Eskiden sadece tarih bilgisine ihtiyaç duyup saat kısmına gerek duymuyorsanız ya da sadece zamana ihtiyaç duyup tarih kısmına ihtiyaç duymuyorsanız bile datetime tipi kullanmak zorunda idiniz. Bu da gereksiz yere alan işgali ve kırpmayla ilgili yazılacak kodlar anlamına geliyordu.
Şimdi date ve time diye ayrı ayrı veri tipleri var. Sadece tarih tutmak için date tipini, sadece zaman tutmak için time tipini kullanabilirsiniz.
Hem veritabanında 6 yerine 3 byte kullanarak hem de gereksiz kırpma kodlarını yazma zorunluluğundan kurtulduğunuz için yeni uygulama faydalı.
Ancak dikkat edilmesi gereken bir detay var: Time tipinin kapladığı yer değişken, 3 ila 5 byte yer kaplayabiliyor. Bunu belirleyen hangi detayda bilgi tuttuğunuz. Saniyenin kaçta birini tutmak istersiniz? Hassasiyetiniz bir saniyeden 100 nanosaniyeye kadar değişiklik gösterebilir.
Değişken tipini belirlerken time(n) tipiyle yapıyoruz bu işi. Mesela time(3) için 4 byte, time(5) için 5 byte kullanmaya başlayabiliyor. Eğer bu kadar hassas olmak istemiyorsanız, boş yere time(2)’den daha hassas kullanıp boşuna byte’larınızı harcamayın.
Küçük bir not: Benzer bir kaygıya datetimeoffset(n) ve datetime2(n)’i kullanırken de sahip olmalısınız. Buralarda da n’de belirttiğiniz hassasiyete göre 2 byte’a kadar tasarruf etmeniz mümkün.
Merhaba hocam. Time tipinde değişken tuttuğunuzda gün gelipte o verileri farklı bir veri kaynağına aktarmaya kalktığınızda küçükte olsa bir sıkıntı çıkabiliyor (başka kaynaklarda bu tip bir değişken olmadığı taktirde) bilginize…
Aynı zamanın time’ını ayrı, date’ini ayrı tutmuşsanız, başka kaynağa aktarırken bunları birleştirmek gerekir. Eğer date’in önemi yok, sadece time’ın önemi varsa, bu durumda da başka kaynağa atarken elinizde date kısmı olmadığı için jenerik bir date eklemeniz gerekebilir.Ama tahmin ediyorum, diğer veritabanı sistemleri de sonraki versiyonlarında bu ayrıma yönelecektir. Tabii bu ne kadar zaman alır bilemem…