[英]Adding seconds using DATEADD is returning a value rounded to minutes - why?
我需要添加LAST_DT(提供为smalldatetime但没有hhmmss)和LAST_TM(提供为nvarchar)来计算真实的DateTime值。
我正在尝试使用DateAdd从LAST_TM增加hhmmss提供的日期。 小时和分钟数已成功添加,但秒数被向上或向下舍入为分钟。 这是我的代码
DECLARE @LAST_DT smalldatetime = '2017-10-18'
DECLARE @LAST_TM nvarchar(6) = '153954'
SELECT
@LAST_DT
,@LAST_TM
,DATEADD(minute, CAST(substring(@LAST_TM,3,2) AS INT),
DATEADD(hour, CAST(left(@LAST_TM,2) AS INT),@LAST_DT)) AS Dt_HhMm
,Right(@LAST_TM,2) As Secs
,DATEADD(second, CAST(Right(@LAST_TM,2) AS INT),
DATEADD(minute, CAST(substring(@LAST_TM,3,2) AS INT),
DATEADD(hour, CAST(left(@LAST_TM,2) AS INT),@LAST_DT))) AS Dt_HhMmSs
和相应的结果
LAST_DT LAST_TM Dt_HhMm Secs Dt_HhMmSs
2017-10-18 153954 2017-10-18 15:39:00 54 2017-10-18 15:40:00
为什么将秒数舍入到最接近的分钟数?
(我正在使用MS SQL Server 2008 R2)
我想我实际上回答了我自己的问题。 LAST_DT是smalldatetime,根据定义,它不包括秒。 将LAST_DT转换为日期时间:
SELECT
CC.LAST_DT
,CC.LAST_TM
,DATEADD(second, CAST(Right(CC.LAST_TM,2) AS INT),
DATEADD(minute, CAST(substring(CC.LAST_TM,3,2) AS INT),
DATEADD(hour, CAST(left(CC.LAST_TM,2) AS INT),CAST(CC.LAST_DT As datetime))))
AS Dt+HhMmSs
解决问题。
我很好奇,为什么当smalldatetime明显不是数据类型的一部分时,它将以秒显示? 这非常令人困惑/误导。
您可以将LAST_DT转换为日期时间,然后以HH:MM:SS格式添加LAST_TM
CONVERT(datetime, CC.LAST_DT) + STUFF(STUFF(CC.LAST_TM, 3, 0, ':'), 6, 0, ':')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.