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

Откуда:
Сообщений: 33
Всем привет.
Подскажите, пожалуйста, как изменить время у даты (дата - переменная).

Declare @start as datetime = '20121212 12:55:55.000'

Необходимо, чтобы дата приняла значение 20121212 00:00:00.000.

Спасибо.
18 дек 12, 14:00    [13648592]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
cast as date
Guest
cast as date
18 дек 12, 14:03    [13648630]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
ArghBuzz
Member

Откуда:
Сообщений: 33
cast as date,
Спасибо.
Этот способ обнуляет, но я был бы признателен за вариант, который применим к любому изменению времени.
К примеру преобразовать в 20121212 23:59:59.999
18 дек 12, 14:09    [13648706]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
+ dateadd
Guest
ArghBuzz
cast as date,
Спасибо.
Этот способ обнуляет, но я был бы признателен за вариант, который применим к любому изменению времени.
К примеру преобразовать в 20121212 23:59:59.999

+ dateadd
18 дек 12, 14:12    [13648734]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
ArghBuzz,

SELECT dateadd(day,datediff(day,(0),GETDATE()),(0)) 
18 дек 12, 14:13    [13648742]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
ArghBuzz
Member

Откуда:
Сообщений: 33
+ dateadd,

Для использования +dateadd мне необходимо знать на какое значение менять.
Пока что решил так:
select @start = cast (@start as date)
select @end = cast (@end + Datepart("dd", 0) as date)

но тут тоже обнуление.
есть более рациональные способы?
18 дек 12, 14:17    [13648788]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
ArghBuzz
Member

Откуда:
Сообщений: 33
trew,

Спасибо
18 дек 12, 14:17    [13648790]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
+ dateadd
Guest
ArghBuzz
+ dateadd,

Для использования +dateadd мне необходимо знать на какое значение менять.



а кто это должен знать?
18 дек 12, 14:20    [13648818]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
ArghBuzz,

select convert(datetime,CONVERT(int,CONVERT(datetime,'20121212 12:00:00')) + CONVERT(float,convert(datetime,convert(time,'15:56:00'))))
18 дек 12, 15:04    [13649118]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
точнее так

select convert(datetime,floor(CONVERT(float,CONVERT(datetime,'20121212 12:00:00')))+ 
CONVERT(float,convert(datetime,convert(time,'15:56:00'))))
18 дек 12, 15:06    [13649131]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ArghBuzz
К примеру преобразовать в 20121212 23:59:59.999

Если что, для типа данных datetime написанное вами эквивалентно 20121213 00:00:00.000.
18 дек 12, 15:12    [13649182]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
DECLARE @start datetime='20121212 12:55:55.000';
SELECT CAST(CONVERT(VARCHAR(11),@start,126)+'23:59:59.999') AS DATETIME);
18 дек 12, 15:36    [13649357]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
ArghBuzz
Member

Откуда:
Сообщений: 33
Коллеги, всем спасибо за уделенное время и помощь.
18 дек 12, 16:19    [13649628]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
iap
DECLARE @start datetime='20121212 12:55:55.000';
SELECT CAST(CONVERT(VARCHAR(11),@start,126)+'23:59:59.999') AS DATETIME);

DECLARE @start datetime='20121212 12:55:55.000';
SELECT CAST(CONVERT(VARCHAR(11),@start,126)+'23:59:59.999' AS DATETIME);
18 дек 12, 16:39    [13649782]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
trew
iap
DECLARE @start datetime='20121212 12:55:55.000';
SELECT CAST(CONVERT(VARCHAR(11),@start,126)+'23:59:59.999') AS DATETIME);

DECLARE @start datetime='20121212 12:55:55.000';
SELECT CAST(CONVERT(VARCHAR(11),@start,126)+'23:59:59.999' AS DATETIME);
Скобка лишняя, да?
Хуже того: три девятки-то в конце ни за что не получатся!
18 дек 12, 16:50    [13649887]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
две 2-ки
Guest
iap
trew
пропущено...

DECLARE @start datetime='20121212 12:55:55.000';
SELECT CAST(CONVERT(VARCHAR(11),@start,126)+'23:59:59.999' AS DATETIME);
Скобка лишняя, да?
Хуже того: три девятки-то в конце ни за что не получатся!

ну если очень сильно захотеть (и добавить две "2-ки") то запросто

DECLARE @start datetime2='20121212 12:55:55.000';
SELECT CAST(CONVERT(VARCHAR(11),@start,126)+'23:59:59.999' AS DATETIME2);
18 дек 12, 17:31    [13650195]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Изменить время у даты  [new]
Eugenia79
Member

Откуда:
Сообщений: 27
Воспользовалась приводимыми тут функциями.
select (convert(datetime, floor(CONVERT(float,CONVERT(datetime,GETDATE()))) + CONVERT(float,convert(datetime,convert(time,'09:00:00')))) ) - это выражение возвращает все корректно, а вот если время поменять на 07:00:00 (или 10:00:00 и т.д. с 3-х часовым интервалом), то уже возвращается дата
2016-04-15 06:59:59.997

Почему так и как сделать правильно? Пока что приходит в голову только через convert в строку и обратно в дату.
15 апр 16, 10:43    [19060444]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
iljy
Member

Откуда:
Сообщений: 8711
Eugenia79,

правильно - это для модификации даты пользоваться функциями, предназначенными для модификации даты.

select DATEADD(hh, 10, DATEADD(dd, datediff(dd, 0, getdate()), 0))
15 апр 16, 10:48    [19060480]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31947
Eugenia79
Воспользовалась приводимыми тут функциями.
А вы читайте и разбирайтесь, а не копируйте :-)
Делать через float не очень хорошая идея.
Eugenia79
Пока что приходит в голову только через convert в строку и обратно в дату.
Или так, или через функции работы с датами, как уже тут писали.
15 апр 16, 11:07    [19060609]     Ответить | Цитировать Сообщить модератору
 Re: Изменить время у даты  [new]
Eugenia79
Member

Откуда:
Сообщений: 27
спасибо большое!
15 апр 16, 13:39    [19061831]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить