读书人

字符型时间计算,该怎么解决

发布时间: 2012-02-03 22:02:47 作者: rapoo

字符型时间计算
有两个表时间字段是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:0310:5001:47
08:0017:0009:00
08:0017:0609: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:0310:50107
08:0017:00540
08:0017:06546
08:0517:06541

读书人网 >SQL Server

热点推荐