Конвертация даты
Пусть имеем весьма простенькую таблицу:
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
Дискуссию по этому поводу читайте здесь: https://sqlclub.ru/forum/viewtopic.php?f=4&t=2163
Comments
- Anonymous
April 09, 2009
PingBack from http://asp-net-hosting.simplynetdev.com/%d0%ba%d0%be%d0%bd%d0%b2%d0%b5%d1%80%d1%82%d0%b0%d1%86%d0%b8%d1%8f-%d0%b4%d0%b0%d1%82%d1%8b/