Конвертация даты


Пусть имеем весьма простенькую таблицу:


 


create table tbl (d date)


 


В которую положим одну дату:


 


insert tbl values ('2009-04-01')


select *, cast(d as char(10)) + ' ' + '00:00:00' from tbl


d         


---------- -------------------


2009-04-01 2009-04-01 00:00:00


 


Как вы думаете, почему этот запрос вылетает с ошибкой:


 


select *, cast(cast(d as char(10)) + ' 00:00:00' as datetime) from tbl


Msg 242, Level 16, State 3, Line 1


The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.


 


в то время, как этот работает нормально:


 


select *, cast('2009-04-01' + ' 00:00:00' as datetime) from tbl


d         


---------- -----------------------


2009-04-01 2009-04-01 00:00:00.000


 


И этот тоже:


 


declare @d date = '2009-04-01'


select *, cast(cast(@d as char(10)) + ' 00:00:00' as datetime) from tbl


d         


---------- -----------------------


2009-04-01 2009-04-01 00:00:00.000


 


И даже этот:


 


select top 100 percent *, cast(cast(d as char(10)) + ' 00:00:00' as datetime) from tbl


d         


---------- -----------------------


2009-04-01 2009-04-01 00:00:00.000


 


Дискуссию по этому поводу читайте здесь: http://sqlclub.ru/forum/viewtopic.php?f=4&t=2163


Skip to main content