SQL cast datetime
в SQL Server 2005 почему:
PRINT Cast('' AS datetime)
дисплей:
1 января 1900 12: 00
Я бы подумал, что это должно быть null
?
3 ответов
пустая строка приводится к 0
который позже приведен к дате era.
в отличие от Oracle
, SQL Server
различают NULL
и пустая строка.
это потому, что пустая строка ''
не NULL
. Если у вас:
select Cast(null AS datetime)
выход:
-----------------------
NULL
(1 row(s) affected)
приведение и преобразование (Transact-SQL)
когда символьные данные, которые представляют только дату или только время бросьте в datetime или smalldatetime типы данных, неопределенное время компонента устанавливается в 00:00:00.000, а установлен компонент неопределенная дата к 1900-01-01.
из экспериментов похоже, что SQL Server пытается привести непосредственно к DateTime
, и в противном случае пытается бросить в int
а потом 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)
выход:
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.