我需要添加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)
答案 0 :(得分:1)
我想我几乎回答了自己的问题。 LAST_DT是smalldatetime,根据定义,它不包括秒。 将LAST_DT转换为datetime:
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会显示秒数,而这显然不是数据类型的一部分?这非常令人困惑/误导。
答案 1 :(得分:1)
您只需将LAST_DT转换为日期时间,然后以HH:MM:SS格式添加LAST_TM
environment