2016-12-05 12 views
12

एमएस दस्तावेज़ कहा गया है कि ISDATE()SQL सर्वर 2012 ISDATE()

रिटर्न 1 अगर अभिव्यक्ति कोई मान्य दिनांक, समय, या datetime मूल्य है, अन्यथा, 0

तो यह नीचे दिए गए उदाहरण में 0 क्यों लौटा रहा है?

DECLARE @DT VARCHAR(30) = '1/4/1752' 

SELECT 
    ISDATE(@DT), 
    TRY_CONVERT(DATE, @DT, 101), 
    TRY_CONVERT(DATETIME, @DT), 
    TRY_CAST(@DT as DATE), 
    TRY_CAST(@DT AS DATETIME) 

रिटर्न

0 1752-01-04 NULL 1752-01-04 NULL 

1753 को तारीख बदलें और ...

1 1753-01-04 1753-01-04 00:00:00.000 1753-01-04 1753-01-04 00:00:00.000 

select ISDATE('17521231'), ISDATE('17530101') gives 

0 1 
+1

ध्यान दें कि '17520401' * एक वैध' DATETIME2' मान है, लेकिन * वैध * डेटाटाइम मान नहीं है, इसलिए 'ISDATE' अभी भी 0 लौटाता है। गॉर्डन द्वारा सुझाए गए अनुसार 'TRY_CONVERT' दृष्टिकोण इस मामले को कवर करेगा सही भी (और दस्तावेज़ीकरण को शायद tweaking की आवश्यकता है - '17520401' मान्य 'DATE' है, लेकिन जाहिर है," वैध दिनांक मान ", जो गलत है।)' ISDATE' का व्यवहार स्वयं संभवतः नहीं बदला जाएगा पिछड़ा संगतता चिंताओं। –

+0

http://stackoverflow.com/a/3310588/2975396 – TheGameiswar

+2

मुझे लगता है कि यह एक डुप्लिकेट नहीं है, दस्तावेज़ समय के लिए दस्तावेज राज्यों की सीमा 1753-01-01 99 99-12-31 के माध्यम से है, जबकि दिनांक डेटा की सीमा है 0001-01-01 99 99-12-31. के माध्यम से और यह 'रिटर्न 1 लौटाता है यदि अभिव्यक्ति वैध दिनांक, समय या डेटाटाइम मान है; अन्यथा, 0.' – TheGameiswar

उत्तर

13

रूप documentation में बताया गया है, जल्द से जल्द datetime मूल्य '1753/01/01' है।

मैं सुझाव दूंगा कि आप इसके बजाय try_convert() का उपयोग करें। यह आपको अधिक विकल्प प्रदान:

try_convert(date, '17521231') is not null 

date डेटा प्रकार साल एक के लिए वापस चला जाता है।

+2

दस्तावेज यह भी बताता है कि सबसे पुरानी तारीख "जबकि डेटा डेटा की सीमा 0001-01-01 99 99-12-31 के माध्यम से है" ans ISDATE() दस्तावेज़ कहता है "अगर अभिव्यक्ति वैध दिनांक, समय, या डेटाटाइम मूल्य; अन्यथा, 0. " तो निश्चित रूप से ISATE ('17520101') एक वैध तिथि है? – Maurice1408

+0

एक वर्ष शून्य नहीं था! – Cato

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