我的表中有两列,它们被设置为nvarchar字段,但包含时间值。一列是时间字段,一列是持续时间字段,例如。
Time 1 = 15:05:22 (time field)
Time 2 = 00:02:00 (duration field)
我想输出时间1 +时间2 = 15:07:22
我尝试了CAST(time1 as datetime)+CAST(time2 as datetime)
,但我得到1900-01-01 15:07:22.000
,我不想要日期部分。我不能使用cast作为时间,因为我得到一个错误我认为这是因为字段设置为nvarchar而不是日期/时间?
只需将结果转换为time
即可删除日期部分:
DECLARE @time_txt varchar(8);
DECLARE @duration_txt varchar(8);
SET @time_txt = '15:05:22';
SET @duration_txt = '00:02:00';
SELECT CAST(CAST(@time_txt as datetime) + CAST(@duration_txt as datetime) as time);
-- yields the time value 15:07:22.0000000
如果您需要将其作为字符串(例如,以hh:mm:ss
格式),则可以使用CONVERT和相应的格式选项:
...
SELECT CONVERT(varchar(8), CAST(@time_txt as datetime) + CAST(@duration_txt as datetime), 108);
-- yields the string 15:07:22
PS:一般来说,你应该使用time
列来代替time
列而不是varchar
列。不幸的是,SQL Server在持续时间(时间跨度)方面没有非常好的数据类型。
从your_table中选择dateadd(second,datediff(second,0,time1),time2)作为Time3