ฉันสงสัยว่าความแตกต่างระหว่างสองวิธีต่อไปนี้คืออะไร:
GETUTCDATE()-2
และ
DATEADD(d,-2,GETUTCDATE())
ฉันเดาใช้DATEADD
เป็นวิธีที่ถูกต้อง แต่สงสัยว่าทำไม
ฉันสงสัยว่าความแตกต่างระหว่างสองวิธีต่อไปนี้คืออะไร:
GETUTCDATE()-2
และ
DATEADD(d,-2,GETUTCDATE())
ฉันเดาใช้DATEADD
เป็นวิธีที่ถูกต้อง แต่สงสัยว่าทำไม
คำตอบ:
ไม่มีความแตกต่างที่แท้จริง แต่เมื่อคุณเริ่มใช้DATETIME2
ค่าหรือฟังก์ชั่นที่คืนDATETIME2
ค่าคุณจะได้รับข้อผิดพลาด
SELECT SYSDATETIME() - 1 AS [Incompatible]
ข่าวสารเกี่ยวกับ 206, ระดับ 16, สถานะ 2, บรรทัดที่ 17 ตัวดำเนินการชนิดปะทะ: datetime2 ไม่เข้ากันกับ int
สำหรับสิ่งเหล่านี้คุณต้องใช้ฟังก์ชันคณิตศาสตร์วันที่
SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]
Aaron Bertrand พูดเกี่ยวกับปัญหานี้สั้น ๆ ในBad Habits to Kick series ของเขา
ตรงกันข้ามกับการอ้างสิทธิ์ในหนึ่งในคำตอบอื่นตัวเลือกทั้งสองได้รับการสนับสนุนอย่างเป็นทางการและจัดทำโดย SQL Server: datetime - number
มันไม่ได้เป็นพฤติกรรมที่ไม่ได้กำหนด
ประโยชน์ใหญ่ของ
DATEADD(d, -2, GETUTCDATE())
คือข้อเท็จจริงที่ว่ามันคือการจัดทำเอกสารด้วยตนเอง : มันมีจุดประสงค์ที่ชัดเจนทันที
GETUTCDATE() - 2
ในทางกลับกันอาศัยผู้อ่านที่รู้ถึงความหมายของการdatetime - number
ดำเนินการ ใช่ปัจจุบันอาจเป็นสำนวน T-SQL แต่ความจริงที่ว่านี้ไม่ได้รับการสนับสนุนอีกต่อไปโดยdatetime2
นัยว่าผู้พัฒนา SQL Server รุ่นต่อไปในอนาคตอาจไม่คุ้นเคยอีกต่อไป
date
เพิ่มเข้ามา) มันค่อนข้างยุ่ง