字符型时间计算
有两个表时间字段是nvarchar类型的,现在需对两个进行时间对比
表结构如下
时间1 时间2
09:03 10:50
08:00 17:00
结果如下
时间1 时间2 时间长
09:03 10:50 01:47
08:00 17:00 09:00
不知道用什么函数能进行数据转换?
------解决方案--------------------declare @a table(a nvarchar(20),b nvarchar(20),c nvarchar(20))
insert @a select '09:03 ', '10:50 ',null
union all select '08:00 ', '17:00 ',null
select a,b,c=right(100+datediff(hour,cast(a as datetime),cast(b as datetime)),2)+ ': '+
right(100+datediff(minute,cast(a as datetime),cast(b as datetime)) %60,2)
from @a
------解决方案--------------------declare @a table( 时间1 nvarchar(20),时间2 nvarchar(20))
insert @a select '09:03 ', '10:50 '
union all select '08:00 ', '17:00 '
union all select '08:00 ', '17:06 '
union all select '08:90 ', '17:06 '
union all select '08:00 ', '1706 '
select * from @a where isdate(时间1)> 0
select 时间1, 时间2 , right(100+datediff(Hour,时间1,时间2),2)+ ': '+right(100+ datediff(minute,时间1,时间2)%60,2) as 时间长 from @a
where isdate(时间1) > 0 and isdate(时间2) > 0
时间1 时间2 时间长
09:03 10:50 01:47
08:00 17:00 09:00
08:00 17:06 09:06
------解决方案--------------------declare @a varchar(100),@b varchar(100)
select @a= '9:3 ',@b= '10:50 '
select cast((datediff(minute,cast (@a as datetime),cast (@b as datetime)))/60 as varchar) + ': '+cast((datediff(minute,cast (@a as datetime),cast (@b as datetime))) % 60 as varchar)
---------------------------
1:47
(所影响的行数为 1 行)
------解决方案--------------------declare @a table( 时间1 nvarchar(20),时间2 nvarchar(20),时间长 nvarchar(20))
insert @a select '09:03 ', '10:50 ', ' '
union all select '08:00 ', '17:00 ', ' '
union all select '08:00 ', '17:06 ', ' '
union all select '08:05 ', '17:06 ', ' '
select 时间1,时间2,abs(datediff(mi, (convert(varchar(10),getdate(),120) + ' '+ 时间1+ ':00 '),
(convert(varchar(10),getdate(),120) + ' '+ 时间2+ ':00 '))) 时间长 from @a
------------------------------------------------
时间1 时间2 时间长
09:03 10:50 107
08:00 17:00 540
08:00 17:06 546
08:05 17:06 541