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

Откуда: Msk
Сообщений: 581
каким макаром можно
из этой даты
2018-12-01 11:02:48.7723973 +03:00

сделать эту дату
2018-12-01 11:02:00 +03:00
, т.е. обнулить секунды
12 дек 18, 11:21    [21761183]     Ответить | Цитировать Сообщить модератору
 Re: формат даты  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36968
Через конвертацию в smalldatetime (хотя могут быть нюансы).
Или через datepart + DATETIMEFROMPARTS

Сообщение было отредактировано: 12 дек 18, 11:26
12 дек 18, 11:26    [21761195]     Ответить | Цитировать Сообщить модератору
 Re: формат даты  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
DECLARE @D DATETIMEOFFSET='2018-12-01 11:02:48.7723973 +03:00';
SELECT STUFF(S,CHARINDEX(':',S,CHARINDEX(':',S)+1),3,':00')
FROM (SELECT CAST(CAST(@D AS DATETIMEOFFSET(0))AS VARCHAR(100)))T(S);
12 дек 18, 11:40    [21761218]     Ответить | Цитировать Сообщить модератору
 Re: формат даты  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
iap
DECLARE @D DATETIMEOFFSET='2018-12-01 11:02:48.7723973 +03:00';
SELECT STUFF(S,CHARINDEX(':',S,CHARINDEX(':',S)+1),3,':00')
FROM (SELECT CAST(CAST(@D AS DATETIMEOFFSET(0))AS VARCHAR(100)))T(S);
Обратно в дату забыл преобразовать:
DECLARE @D DATETIMEOFFSET='2018-12-01 11:02:48.7723973 +03:00';
SELECT CAST(STUFF(S,CHARINDEX(':',S,CHARINDEX(':',S)+1),3,':00')AS DATETIMEOFFSET(0))
FROM (SELECT CAST(CAST(@D AS DATETIMEOFFSET(0))AS VARCHAR(100)))T(S);
12 дек 18, 11:42    [21761222]     Ответить | Цитировать Сообщить модератору
 Re: формат даты  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Гавриленко Сергей Алексеевич
Через конвертацию в smalldatetime (хотя могут быть нюансы).
Или через datepart + DATETIMEFROMPARTS
1. секунды не просто обнулятся, а с округлением того, что после этого останется (11:03:00).
2. offset будет потерян.
Если конвертировать "в лоб", конечно.
12 дек 18, 11:45    [21761232]     Ответить | Цитировать Сообщить модератору
 Re: формат даты  [new]
court
Member

Откуда:
Сообщений: 2015
declare @dt datetimeoffset
set @dt='2018-12-01 11:02:48.7723973 +03:00'

select @dt, cast(format(@dt, 'yyyy-MM-dd hh:mm:00 zzz') as datetimeoffset)


(Отсутствует имя столбца)(Отсутствует имя столбца)
2018-12-01 11:02:48.7723973 +03:002018-12-01 11:02:00.0000000 +03:00
12 дек 18, 11:52    [21761246]     Ответить | Цитировать Сообщить модератору
 Re: формат даты  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 581
не ожидал, что столько вариантов может быть.
Спасибо.
для моей задачи подходит вариант без округления.
12 дек 18, 12:01    [21761268]     Ответить | Цитировать Сообщить модератору
 Re: формат даты  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36968
iap
1. секунды не просто обнулятся, а с округлением того, что после этого останется (11:03:00).

Забыл про округление, да.

iap
2. offset будет потерян.
Ну, там много функций, в т.ч. и такая: DATETIMEOFFSETFROMPARTS
12 дек 18, 13:03    [21761406]     Ответить | Цитировать Сообщить модератору
 Re: формат даты  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 581
есть проблема,
если исходное время PM, то новое получается AM


DECLARE @dt DATETIMEOFFSET
SET @dt = '2018-12-02 22:18:20.8414917 +03:00'

SELECT @dt,
       CAST(FORMAT(@dt, 'yyyy-MM-dd hh:mm:00 zzz') AS DATETIMEOFFSET)
12 дек 18, 13:35    [21761474]     Ответить | Цитировать Сообщить модератору
 Re: формат даты  [new]
court
Member

Откуда:
Сообщений: 2015
NewIvanovec
DECLARE @dt DATETIMEOFFSET
SET @dt = '2018-12-02 22:18:20.8414917 +03:00'

SELECT @dt,
       CAST(FORMAT(@dt, 'yyyy-MM-dd HH:mm:00 zzz') AS DATETIMEOFFSET)
12 дек 18, 13:39    [21761483]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить