В SQL Server 2005, почему:SQL отливать DateTime
PRINT Cast('' AS datetime)
дисплей:
1 январь 1900 12:00 утро
я бы подумал, что это должно быть null
?
В SQL Server 2005, почему:SQL отливать DateTime
PRINT Cast('' AS datetime)
дисплей:
1 январь 1900 12:00 утро
я бы подумал, что это должно быть null
?
Пустая строка отлита до 0
, которая позже ливается к дате эпохи.
В отличие от Oracle
, SQL Server
различает NULL
и пустую строку.
Это потому, что пустая строка ''
не является NULL
. Если вы делаете:
select Cast(null AS datetime)
ВЫВОД:
-----------------------
NULL
(1 row(s) affected)
CAST and CONVERT (Transact-SQL)
Когда символ данных, который представляет только дату или только компоненты времени является приведение к DateTime или smalldatetime типы данных, un установленное время Компонент установлен в 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.
этот тест показывает цитату BOL из моего ответа в действии: 'select Cast ('1/1/2010' AS datetime) как defaultTime, Cast ('1: 23: 45.678' AS datetime) как defaultDate, Cast ('' AS datet ime) как defaultDateTime'. если время не задано, по умолчанию установлено значение «00: 00: 00 000', если дата не указана, по умолчанию« 1/1/1900 » –
ах .. во время путешествия .. рад кто-то нашел его – CheeseConQueso