Hemen hemen tüm Cevaplar ve Yorumlar Artıları ağır ve Eksileri hafif. İşte şimdiye kadar tüm Artıları ve Eksileri bir özeti artı bazı önemli Eksileri (aşağıda # 2) Ben sadece bir kez söz ya da hiç bahsettiğini gördüm.
- Artıları:
1.1. Daha fazla ISO uyumlu (ISO 8601) (bunun pratikte nasıl oynandığını bilmememe rağmen).
1.2. Daha fazla menzil (1/1/0001 ila 12/31/9999 / 1/1 / 1753-12 / 31/9999) (1753 yılından önceki tüm ekstra menzil, örneğin, hariç, muhtemelen kullanılmayacaktır, tarihsel, astronomik, jeolojik vb. uygulamalarda).
1.3. .NET DateTime
Türünün aralık aralığıyla tam olarak eşleşir (her ne kadar değerler hedef türün aralığı ve hassasiyeti dahilinde ise, başka hata / yuvarlama gerçekleşmeyecekse, özel bir kodlama olmadan hem ileri hem de geri dönüş yapmasına rağmen).
1.4. Daha fazla hassasiyet (100 nanosaniye aka 0.000.000,1 sn., 3.33 milisaniye aka 0.003,33 sn.) (Mühendislik / bilimsel uygulamalarda ekstra hassasiyet muhtemelen kullanılmayacak olsa da).
1.5. Iman Abidi'nin iddia ettiği gibi benzer (1 milisaniyede değil "aynı" (3.33 milisaniyede olduğu gibi) için yapılandırıldığında DateTime
, daha az alan kullanır (7'ye 8 bayt), ancak elbette, büyük olasılıkla gereksiz faydalar da dahil olmak üzere en çok lanse edilen iki (diğeri aralık) olan hassas fayda.
- EKSİLERİ:
2.1. Bir Parametreyi bir .NET'e geçirirken, varsayılan olarak SQL Server'ın aralığı ve / veya hassasiyeti dışında bir değer geçirip geçiremeyeceğinizi SqlCommand
belirtmeniz gerekir .System.Data.SqlDbType.DateTime2
DateTime
System.Data.SqlDbType.DateTime
2.2. SQL Server ifadelerinde sayısal değerler ve işleçler kullanarak aşağıdakileri yapmak için dolaylı / kolayca kayan nokta sayısalına (dk tarih-saatinden beri geçen gün sayısı) dönüştürülemez:
2.2.1. gün veya kısmi gün ekleme veya çıkarma. Not: DateAdd
İşlev'i geçici bir çözüm olarak kullanmak , tarih saatinin tüm bölümleri olmasa da birden fazla düşünmeniz gerektiğinde önemsiz değildir.
2.2.2. “yaş” hesaplaması için iki tarih-saat arasındaki farkı alır. Not: Bunun DateDiff
yerine SQL Server'ın İşlevini kullanamazsınız , çünkü age
çoğu insanın beklediği gibi hesaplanmaz, çünkü iki tarih-saati, küçük bir kesir için bile olsa belirtilen birimlerin bir takvim / saat tarih-saat sınırını geçerse bu birimin, bu Örneğin 0'a karşı o birimin 1 olarak farkını dönersiniz, DateDiff
içinde Day
'sadece 1 milisaniye arayla bu tarih-kat ise 1 vs 0 (gün) dönecektir iki tarih-kez s farklı takvim günlerinde (ör. “1999-12-31 23: 59: 59.9999999” ve “2000-01-01 00: 00: 00.0000000”). Bir takvim gününü geçmeyecek şekilde taşındıklarında aynı 1 milisaniye tarih-saat farkı Day
, 0 (gün) cinsinden "DateDiff" değerini döndürür .
2.2.3. almak Avg
sadece geri tekrar birinci ve ardından “Float” dönüştürerek (bir Agrega Sorgusu) tarih-kez DateTime
.
NOT: Bir sayıya dönüştürmek DateTime2
için, aşağıdaki formül gibi, değerlerinizin 1970 yılından daha az olmadığını varsayalım (bu, tüm ekstra aralığı artı 217 yıl daha kaybettiğiniz anlamına gelir) Not: sayısal taşma sorunlarıyla karşılaşabileceğiniz için ekstra aralığa izin verecek şekilde formülü ayarlayamazsınız.
25567 + (DATEDIFF(SECOND, {d '1970-01-01'}, @Time) + DATEPART(nanosecond, @Time) / 1.0E + 9) / 86400.0
- Kaynak: “ https://siderite.dev/blog/how-to-translate-t-sql-datetime2-to.html “
Tabii ki, aynı zamanda olabilir Cast
için DateTime
ilk (ve gerekli tekrar etmek durumunda DateTime2
), ancak hassasiyet ve aralık içinde (önceki tüm yıla 1753) faydalar kaybetmek istiyorum DateTime2
vs. DateTime
prolly 2 büyük ve aynı zamanda prolly vardır büyük olasılıkla toplama / çıkarma / "yaş" (vs. DateDiff
) / Avg
calcs faydası için kayan noktalı sayıya (gün sayısı) örtülü / kolay dönüşümleri kaybettiğinizde neden kullanmanız gerektiği sorusunu akla getiren en az gerekli olan 2 tecrübelerime göre.
Btw, Avg
tarih saatlerinin önemli bir kullanım durumudur (veya en azından olmalıdır ). a) Tarih (genel bir temel tarih-saat) süreyi (ortak bir uygulama) temsil etmek için kullanıldığında ortalama sürenin kullanılmasının yanı sıra, b) ortalama tarihin ne olduğuna dair gösterge tablosu türü bir istatistik elde etmek de yararlıdır. saat, bir Satır aralığının / grubunun tarih-saat sütunundadır. c) Bir Sütundaki değerleri artık / artık geçerli olmayan ve / veya kullanımdan kaldırılması gerekebilecek değerleri izlemek / gidermek için standart (veya en azından standart olması gerekir) geçici bir Sorgu, her sayım için listelenen sayıyı listelemektir. ve (varsa) Min
, Avg
ve Max
tarih-zaman damgaları bu değerle ilişkili.