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.