2010-03-25 15 views
7

डाली SQL सर्वर 2005 में, क्यों करता है:एसक्यूएल दिनांक

PRINT Cast('' AS datetime)

प्रदर्शन:

जनवरी 1 1900: 12:00 पूर्वाह्न

मैं यह होना चाहिए सोचा होगा null?

+1

आह .. समय यात्रा .. खुशी है कि किसी ने इसे पाया – CheeseConQueso

उत्तर

5

खाली स्ट्रिंग 0 पर डाली जाती है जिसे बाद में युग की तारीख में डाला जाता है।

Oracle के विपरीत, SQL ServerNULL और एक खाली स्ट्रिंग के बीच अंतर करता है।

9

ऐसा इसलिए है क्योंकि खाली स्ट्रिंग ''NULL नहीं है। यदि आप करते हैं:

select Cast(null AS datetime) 

उत्पादन:

----------------------- 
NULL 

(1 row(s) affected) 

CAST and CONVERT (Transact-SQL)

चरित्र डेटा का प्रतिनिधित्व केवल तारीख या केवल समय घटकों datetime या smalldatetime को डाली है जब डेटा प्रकार, संयुक्त निर्दिष्ट समय घटक 00: 00: 00.000, और पर सेट किया गया है अनिर्दिष्ट दिनांक घटक से 1 9 00-01-01 पर सेट है।

1

प्रयोग से, ऐसा लगता है कि एसक्यूएल सर्वर DateTime के लिए सीधे कास्ट करने के लिए प्रयास करता है, और ऐसा न करने पर कि DateTime को int और उसके बाद के लिए कास्ट करने के लिए प्रयास करता है:

PRINT Cast('2009-1-1' AS datetime) 
go 
PRINT Cast('2009/1/1' AS datetime) 
go 
PRINT Cast('1.1' AS datetime) 
go 
PRINT Cast('1/2009/1' AS datetime) 
go 
PRINT Cast('' AS int) 
go 
PRINT Cast(' ' AS int) 
go 
PRINT Cast(0 AS datetime) 
go 
PRINT Cast('X' AS datetime) 
go 
PRINT Cast('X' AS int) 

आउटपुट:

Jan 1 2009 12:00AM 
Jan 1 2009 12:00AM 
Msg 241, Level 16, State 1, Line 1 
Conversion failed when converting date and/or time from character string. 
Jan 1 2009 12:00AM 
0 
0 
Jan 1 1900 12:00AM 
Msg 241, Level 16, State 1, Line 1 
Conversion failed when converting date and/or time from character string. 
Msg 245, Level 16, State 1, Line 1 
Conversion failed when converting the varchar value 'X' to data type int. 
+0

यह परीक्षण कार्रवाई में मेरे उत्तर से बीओएल उद्धरण दिखाता है: 'डिफ़ॉल्ट का चयन करें (' 1/1/2010 'एएस डेटाटाइम) डिफ़ॉल्ट समय के रूप में, कास्ट (' 1: 23: 45.678 'एएस डेटाटाइम) डिफ़ॉल्ट के रूप में, कास्ट ('' एएस डेटेट ime) डिफ़ॉल्ट के रूप मेंडेटाइम '। यदि समय नहीं दिया जाता है तो यह '00: 00: 00.000' पर डिफ़ॉल्ट होता है, अगर तिथि नहीं दी जाती है तो यह' 1/1/1 9 00 ' –

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