2013-03-22 4 views
7

DATETIME & INTEGER और DATE & INTEGER के बीच संबंध है?पूर्णांक DATETIME से घटाया जा सकता है लेकिन DATE प्रकार

यह ठीक कार्यान्वित:

DECLARE @Yesterday DATETIME = GETDATE(); 
SELECT @Yesterday-1; 

करता है के रूप में:

DECLARE @Yesterday DATE = GETDATE(); 
SELECT @Yesterday; 

यह त्रुटियों:

DECLARE @Yesterday DATE = GETDATE(); 
SELECT @Yesterday-1; 

मैं सुरक्षित रूप से एक datetime लेकिन एक से नहीं से एक integer प्रकार घटा सकते date
इस व्यवहार का कारण क्या है?

+7

'datetime' को' int' से निहित डाली Sybase दिनों में वापस चला जाता है। मुझे लगता है कि नए डेटाटाइप के लिए उन्होंने बग के संभावित कारण के रूप में ऐसा नहीं करने का फैसला किया (गलती से 'डेटाटाइम' कॉलम में पूर्णांक मान डालने और इस मुद्दे पर सतर्क नहीं होने के कारण)। एक संबंधित कनेक्ट आइटम अनुरोध निहित रूपांतरणों के बारे में शिकायत करता है [अधिक मजबूत विकास के लिए वैकल्पिक चेक जोड़ें] (http://connect.microsoft.com/SQL/feedback/ViewFeedback.aspx?FeedbackID=260762) –

+0

@ मार्टिनस्मिथ ऊपर - जानकारी के लिए धन्यवाद – whytheq

+0

@ मार्टिनस्मिथ - क्या आपने बंद करने के लिए वोट दिया था? जिसने कोई टिप्पणी नहीं छोड़ी है; एक टिप्पणी देखने के लिए अच्छा है क्योंकि यह ओपी – whytheq

उत्तर

7

वास्तव में, यह बहुत ही संगत है। DATETIME एसक्यूएल सर्वर के पिछले संस्करणों से विरासत में प्राप्त एक प्रकार है। 2008 संस्करण के बाद से, DATETIME2 पेश किया गया है, और पूर्णांक को जोड़ने/घटाने की संभावना हटा दी गई है। आप अभी भी विरासत के रूप में DATETIME पर कर सकते हैं।

DATE, जैसे DATETIME2 2008 से भी आसपास रहा था, और इस प्रकार के जोड़ने/घटाव संख्या भी प्रतिबंधित है।

DECLARE @Yesterday DATETIME2 = GETDATE(); 
SELECT @Yesterday-1; 

तो सब कुछ ठीक :):

यह आपको एक त्रुटि देता है।

+1

+1 जानकारी के लिए धन्यवाद - मुझे 'DATETIME2' – whytheq

1

तो यह बेहतर हो सकता है:

declare @Yesterday DATE = DATEADD(d, -1, getdate()) 
select @Yesterday 
+0

से अनजान था - +1 जानकारी के लिए धन्यवाद - बहुत सारे कामकाज हैं - मैंने अभी सोचा" क्यूं कर?" – whytheq

संबंधित मुद्दे