Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Отсечение времени от даты  [new]
Challenger
Member

Откуда: Москва
Сообщений: 426
Господа, подскажите, пожалуйста, как корректно отсечь время от переменной типа datetime, причем сделать так, чтобы этот механизм работал на серверах с любыми языковыми настройками и любыми настройками дат?
Пример. 15.12.2005 10:00 должно преобразоваться в 15.12.2005

Не понимаю почему не всегда работает (не для всех дат) следующий вариант
SELECT cast(cast(Year(@dt) as varchar(4))+cast(Month(@dt) as varchar(2))+cast(Day(@dt) as varchar(2)) as smalldatetime)
где @dt типа datetime?
15 дек 05, 10:54    [2173914]     Ответить | Цитировать Сообщить модератору
 Re: Отсечение времени от даты  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
select Convert(datetime, Round(Convert(float, GetDate()), 0, 1))
так?
15 дек 05, 10:56    [2173933]     Ответить | Цитировать Сообщить модератору
 Re: Отсечение времени от даты  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/faq/faq_topic.aspx?fid=110
15 дек 05, 10:57    [2173939]     Ответить | Цитировать Сообщить модератору
 Re: Отсечение времени от даты  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
tpg
https://www.sql.ru/faq/faq_topic.aspx?fid=110

в принципе тоже вариант
15 дек 05, 10:58    [2173943]     Ответить | Цитировать Сообщить модератору
 Re: Отсечение времени от даты  [new]
Challenger
Member

Откуда: Москва
Сообщений: 426
Спасибо за ответы, а почему не работает первоначальный мой вариант. Он тоже вроде должен быть универсальный?
15 дек 05, 11:19    [2174080]     Ответить | Цитировать Сообщить модератору
 Re: Отсечение времени от даты  [new]
saint
Member

Откуда: Архангельск
Сообщений: 2262
потому что разделители забыл.
15 дек 05, 11:55    [2174360]     Ответить | Цитировать Сообщить модератору
 Re: Отсечение времени от даты  [new]
Challenger
Member

Откуда: Москва
Сообщений: 426
Разделители тут вроде бы ни при чем.
дата в формате yyyymmdd должна быть универсальной, разве нет?
15 дек 05, 12:14    [2174485]     Ответить | Цитировать Сообщить модератору
 Re: Отсечение времени от даты  [new]
Glory
Member

Откуда:
Сообщений: 104760
Challenger
Не понимаю почему не всегда работает (не для всех дат) следующий вариант
SELECT cast(cast(Year(@dt) as varchar(4))+cast(Month(@dt) as varchar(2))+cast(Day(@dt) as varchar(2)) as smalldatetime)
где @dt типа datetime?

А вы смотрели что получается в вашей строке ?

declare @dt datetime
set @dt = '20050101'
select @dt,cast(Year(@dt) as varchar(4))+cast(Month(@dt) as varchar(2))+cast(Day(@dt) as varchar(2))
15 дек 05, 12:56    [2174749]     Ответить | Цитировать Сообщить модератору
 Re: Отсечение времени от даты  [new]
Негодяй
Guest
Сравни:
01.12.2005
Ты получишь
2005121
А не
20051201
Нужно добавить '0', если месяц/день меньше 10:
SELECT cast(cast(Year(@dt) as varchar(4))+right('0'+cast(Month(@dt) as varchar(2)),2)+right('0'+cast(Day(@dt) as varchar(2)),2) as smalldatetime)
15 дек 05, 12:59    [2174770]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить