GETUTCDATE () - 2 बनाम DATEADD (d, -2, GETUTCDATE ())


13

मैं सोच रहा था कि निम्नलिखित दो विधियों में क्या अंतर है:

 GETUTCDATE()-2  

तथा

  DATEADD(d,-2,GETUTCDATE())

मुझे लगता है कि इसका उपयोग DATEADDकरना सही तरीका है, लेकिन सोच रहा था कि क्यों?

जवाबों:


14

वहाँ कोई वास्तविक अंतर नहीं है, लेकिन जब आप DATETIME2मूल्यों का उपयोग करना शुरू करते हैं, या DATETIME2मान लौटाने वाले कार्य करते हैं , तो आपको त्रुटियां मिलेंगी।

SELECT SYSDATETIME() - 1 AS [Incompatible]

Msg 206, लेवल 16, स्टेट 2, लाइन 17 ऑपरेंड टाइप क्लैश: डेटाइम 2 इंट के साथ असंगत है

इनके लिए, आपको गणित कार्यों का उपयोग करना होगा।

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

हारून बर्ट्रेंड इस मुद्दे के बारे में अपनी बुरी आदतों में किक श्रृंखला के लिए संक्षिप्त रूप से बोलते हैं ।


8

अन्य उत्तरों में से एक में दावों के विपरीत, दोनों विकल्प आधिकारिक तौर पर SQL सर्वर द्वारा समर्थित और प्रलेखित हैं : datetime - numberयह अपरिभाषित व्यवहार नहीं है।

का बड़ा फायदा

DATEADD(d, -2, GETUTCDATE())

तथ्य यह है कि यह स्व-दस्तावेजीकरण है : यह उद्देश्य तुरंत स्पष्ट है।

GETUTCDATE() - 2दूसरी ओर, datetime - numberऑपरेशन की परिभाषा जानने वाले पाठक पर निर्भर करता है । हां, यह वर्तमान में मुहावरेदार टी-एसक्यूएल हो सकता है, लेकिन यह तथ्य कि अब इसका datetime2तात्पर्य यह नहीं है कि एसक्यूएल सर्वर डेवलपर्स की भावी पीढ़ियां अब इससे परिचित नहीं हो सकती हैं।


यह और अधिक स्पष्ट रूप यहाँ कहा गया है: अंकगणितीय ऑपरेटर (Transact-SQL) " प्लस (+) और ऋण (-) ऑपरेटर भी पर अंकगणितीय आपरेशनों प्रदर्शन करने के लिए इस्तेमाल किया जा सकता datetime और smalldatetime मूल्यों। "
ypercubeᵀᴹ

@ ypercube y: - (घटाना) (Transact-SQL) की पहली पंक्ति इकाई (दिन) को और भी स्पष्ट रूप से स्पष्ट करती है: "दो संख्याओं (एक अंकगणितीय घटाव ऑपरेटर) को घटाती है। किसी तिथि में, संख्याओं को घटा सकती है "
हेनजी

हां मैंने वह देखा। और फिर बाद में कहा कि "तिथि, समय, डेटाटाइम 2, या डेटाइमऑफ़सेट डेटा प्रकारों के साथ उपयोग नहीं किया जा सकता है।" तो पहले वाक्य में "तारीख" का मतलब किसी भी तारीख / समय के प्रकार से है, सिवाय इसके कि यह निषिद्ध है (इसलिए केवल डेटाइम और स्माटलैडटाइम, मूल रूप से डेटाइम प्रकार जो 2008 (?) संस्करण से पहले अस्तित्व में dateथा) को जोड़ा गया था। यह थोड़ा गड़बड़ है।
ypercube y

शायद यह एक और चीज है जिसे आप अपने उत्तर में जोड़ सकते हैं। यह तथ्य कि यह ऑपरेटर नए प्रकारों का समर्थन नहीं करता है, यह सुझाव देता है कि इसे केवल पिछड़ी संगतता के कारणों के लिए रखा गया है।
ypercube y
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.