如何为存储为字符串“yyyymmddhhmm”的日期添加5分钟

zd287kbt  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(230)

我有一个'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;

我所看到的例子包含了秒,我无法调整我的代码来匹配。任何指点都将不胜感激。
谢谢您。

hujrc8aj

hujrc8aj1#

这里有一条路。

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函数。

pu82cl6c

pu82cl6c2#

你应该修正你的数据!不要在字符串中存储日期/时间值。可以将值转换为 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);

然后可以使用 dateadd() .

相关问题