Как добавить 5 минут к дате, хранящейся в виде строки 'ГГГГММДДЧЧММ' - PullRequest
0 голосов
/ 19 июня 2020

У меня есть формат даты '201906192359', сохраненный в виде строки, но мне нужно добавить к нему 5 минут, учитывая изменения часа или даты. В результате я преобразовал приведенное выше в datetime, чтобы добавить 5 минут, но теперь мне нужно вернуть его обратно в YYYYMMDDHHMM.

DECLARE @test varchar(50);
SET @test = '201906192359';

PRINT @test;

set @test = convert(datetime,substring(@test,1,8)) +
DATEADD(hh,0+substring(@test,9,2),0) +
DATEADD(mi,5+SUBSTRING(@test,11,2),0) 

PRINT @test;

Примеры, которые я видел, включают секунды, а я не смог скорректировать мой код, чтобы он соответствовал. Приветствуются любые указатели.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 22 июня 2020

Вот один способ.

 SELECT REPLACE(REPLACE(REPLACE(CONVERT(CHAR(16),DATEADD(mi,5,STUFF(STUFF(@test,11,0,':'),9,0,' ')),120),'-',''),' ',''),':','');

Я уверен, что кто-то порекомендует следующее, если вы используете SQL Server 2012 или более поздней версии:

 SELECT FORMAT(DATEADD(mi,5,STUFF(STUFF(@test,11,0,':'),9,0,' ')), 'yyyyMMddHHmm')

Хотя последнее выглядит довольно гладко, функция FORMAT делает его относительно ужасно медленным, поэтому я рекомендую никогда (и я не использую это слово часто) использовать функцию FORMAT.

1 голос
/ 19 июня 2020

Вы должны исправить свои данные! Не храните значения даты / времени в строках. Вы можете преобразовать значение в datetime, используя:

select (convert(datetime, left(test, 8)) +
        convert(datetime, timefromparts(substring(test, 9, 2), right(test, 2), 0, 0, 0))
       )
from (values ('201906192359')) v(test);

Затем вы можете добавить 5 минут, используя dateadd().

...