如何将 5 分钟添加到存储为字符串的日期 'YYYYMMDDHHMM'
How to add 5 minutes to a date stored as a string 'YYYYMMDDHHMM'
我将“201906192359”的日期格式存储为字符串,但我需要在其中添加 5 分钟,以了解时间或日期的变化。
因此,我将上面的内容转换为日期时间以添加 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;
我看到的示例包含几秒钟,但我无法调整我的代码以匹配。任何指针将不胜感激。
谢谢。
你应该修复你的数据!不要在字符串中存储 date/time 值。您可以使用以下方法将该值转换为 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()
添加 5 分钟。
这是一种方法。
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 函数。
我将“201906192359”的日期格式存储为字符串,但我需要在其中添加 5 分钟,以了解时间或日期的变化。 因此,我将上面的内容转换为日期时间以添加 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;
我看到的示例包含几秒钟,但我无法调整我的代码以匹配。任何指针将不胜感激。
谢谢。
你应该修复你的数据!不要在字符串中存储 date/time 值。您可以使用以下方法将该值转换为 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()
添加 5 分钟。
这是一种方法。
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 函数。