GETUTCDATE () - 2 - DATEADD (d, -2, GETUTCDATE ())


13

Aşağıdaki iki yöntem arasındaki farkın ne olduğunu merak ediyordum:

 GETUTCDATE()-2  

ve

  DATEADD(d,-2,GETUTCDATE())

Kullanmanın DATEADDdoğru yol olduğunu düşünüyorum, ama nedenini merak ediyordum?

Yanıtlar:


14

Burada gerçek bir fark yoktur, ancak DATETIME2değerleri veya DATETIME2değerleri döndüren işlevleri kullanmaya başladığınızda hata alırsınız.

SELECT SYSDATETIME() - 1 AS [Incompatible]

Msg 206, Seviye 16, Durum 2, Satır 17 İşlenen türü çakışması: datetime2 int ile uyumsuz

Bunlar için, tarih matematik işlevlerini kullanmanız gerekir.

SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]

Aaron Bertrand, Bad Habits to Kick dizisinde bu konuyu kısaca anlatıyor .


8

Diğer yanıtları birinde iddialarının aksine, her iki seçeneğin resmen desteklenmektedir ve belgelenmiş SQL Server tarafından: datetime - numberöyle değil tanımsız davranış.

Büyük avantajı

DATEADD(d, -2, GETUTCDATE())

o olduğu gerçeğidir kendi kendini belgeleyen : It amacı hemen göze çarpmaktadır.

GETUTCDATE() - 2diğer yandan, datetime - numberişlemin tanımını bilen okuyucuya güvenir . Evet, şu anda deyimsel T-SQL olabilir, ancak bunun artık desteklenmemesi datetime2, SQL Server geliştiricilerinin gelecek nesillerinin artık ona aşina olmayabileceği anlamına geliyor.


Burada daha açık bir şekilde ifade edilmiştir: Aritmetik İşleçler (Transact-SQL) " Artı (+) ve eksi (-) işleçleri datetime ve smalldatetime değerlerinde aritmetik işlemler yapmak için de kullanılabilir . "
ypercubeᵀᴹ

@ ypercubeᵀᴹ: - (Çıkar) (Transact-SQL) ' nin ilk satırı birim (günler) için daha da belirgindir: "İki sayıyı çıkarır (aritmetik çıkartma işleci). Bir sayıyı gün olarak bir tarihten çıkarabilir . "
Heinzi

Evet onu gördüm. Ve daha sonra "Tarih, saat, datetime2 veya datetimeoffset veri türleriyle kullanılamaz." Bu nedenle, ilk cümledeki "tarih", yasak olanlar dışında herhangi bir tarih / saat türü anlamına gelir (bu nedenle yalnızca tarih ve küçük tarih, temel dateolarak eklenen 2008 (?) Sürümünden önceki tarih saat türleri ). Biraz dağınık.
ypercubeᵀᴹ

Belki de cevabınıza ekleyebileceğiniz başka bir şey. Bu operatörün yeni tipleri desteklememesi, yalnızca geriye dönük uyumluluk nedeniyle saklandığını düşündürmektedir.
ypercubeᵀᴹ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.