2010-03-25 27 views
7

Trong SQL Server 2005, tại sao:SQL đúc datetime

PRINT Cast('' AS datetime)

display:

ngày 01 tháng 1 năm 1900 00:00

Tôi đã có thể nghĩ nó phải được null?

+1

ah .. thời gian du lịch .. vui mừng ai đó tìm thấy nó – CheeseConQueso

Trả lời

5

Chuỗi rỗng được đúc thành 0 sau đó được đúc vào ngày kỷ nguyên.

Không giống như Oracle, SQL Server phân biệt giữa NULL và chuỗi trống.

9

Đó là vì chuỗi trống '' không phải là NULL. Nếu bạn làm:

select Cast(null AS datetime) 

OUTPUT:

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

(1 row(s) affected) 

CAST and CONVERT (Transact-SQL)

Khi dữ liệu nhân vật đại diện cho chỉ ngày hoặc các thành phần thời gian chỉ là cast đến datetime hoặc smalldatetime loại dữ liệu, thời gian quy định thành phần được đặt thành 00: 00: 00.000 và thành phần ngày không xác định được đặt đến 1900-01-01.

1

Từ thử nghiệm, nó trông giống như SQL Server cố gắng để cast trực tiếp đến DateTime, và thất bại mà cố gắng để cast để int và sau đó đến DateTime:

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) 

Output:

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

thử nghiệm này cho thấy báo giá BOL từ câu trả lời của tôi trong hành động: 'chọn Cast ('1/1/2010' AS datetime) như defaultTime, Cast ('1: 23: 45.678' AS datetime) như defaultDate, Cast ('' AS datet ime) là defaultDateTime'. nếu thời gian không được đặt mặc định là '00: 00: 00.000', nếu ngày không được đặt mặc định là '1/1/1900' –

Các vấn đề liên quan