日期:2014-05-19  浏览次数:20372 次

字符型时间计算
有两个表时间字段是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