请教一个问题啊!
在考勤的时候遇到如下格式的!想转换成分钟。 将以下格式转化成分钟,格式都是不固定的,有且只有"天","小时","分钟",结果取合计的分钟
按 天数 * 8 * 60 分钟 + 小时*60 分钟 + 分钟
如:
格式 分钟
17天4小時 17*8*60+4*60=8400
9天7小時 4740
2天9小時30分鐘 1530
9小時30分鐘 570
4小時 240
50分钟 50 非常谢谢!
在考勤的时候遇到如下格式的!想转换成分钟。 将以下格式转化成分钟,格式都是不固定的,有且只有"天","小时","分钟",结果取合计的分钟
按 天数 * 8 * 60 分钟 + 小时*60 分钟 + 分钟
如:
格式 分钟
17天4小時 17*8*60+4*60=8400
9天7小時 4740
2天9小時30分鐘 1530
9小時30分鐘 570
4小時 240
50分钟 50 非常谢谢!
Drop table [tb]
Go
Create table [tb]([格式] nvarchar(9),[分钟] nvarchar(17))
Insert tb
Select '17天4小時','17*8*60+4*60=8400' union all
Select '9天7小時','4740' union all
Select '2天9小時30分鐘','1530' union all
Select '9小時30分鐘','570' union all
Select '4小時','240' union all
Select '50分鐘','50'
Go
--Select * from tb-->SQL查询如下:
select *,[分钟结果]=
parsename(replace(replace(replace((
case
when charindex('天',[格式]) >0 and charindex('小時',[格式])>0 and charindex('分鐘',[格式])>0
then [格式]
when charindex('天',[格式]) >0 and charindex('小時',[格式])>0
then 格式+'0分鐘'
when charindex('天',[格式]) >0
then 格式+'0小時0分鐘'
when charindex('小時',[格式])>0 and charindex('分鐘',[格式])>0
then '0天'+格式
when charindex('小時',[格式])>0
then '0天'+格式+'0分鐘'
when charindex('分鐘',[格式])>0
then '0天0小時'+格式
end
),'天','.'),'小時','.'),'分鐘',''),3)*8*60 +
parsename(replace(replace(replace((
case
when charindex('天',[格式]) >0 and charindex('小時',[格式])>0 and charindex('分鐘',[格式])>0
then [格式]
when charindex('天',[格式]) >0 and charindex('小時',[格式])>0
then 格式+'0分鐘'
when charindex('天',[格式]) >0
then 格式+'0小時0分鐘'
when charindex('小時',[格式])>0 and charindex('分鐘',[格式])>0
then '0天'+格式
when charindex('小時',[格式])>0
then '0天'+格式+'0分鐘'
when charindex('分鐘',[格式])>0
then '0天0小時'+格式
end
),'天','.'),'小時','.'),'分鐘',''),2)*60 +
parsename(replace(replace(replace((
case
when charindex('天',[格式]) >0 and charindex('小時',[格式])>0 and charindex('分鐘',[格式])>0
then [格式]
when charindex('天',[格式]) >0 and charindex('小時',[格式])>0
then 格式+'0分鐘'
when charindex('天',[格式]) >0
then 格式+'0小時0分鐘'
when charindex('小時',[格式])>0 and charindex('分鐘',[格式])>0
then '0天'+格式
when charindex('小時',[格式])>0
then '0天'+格式+'0分鐘'
when charindex('分鐘',[格式])>0
then '0天0小時'+格式
end
),'天','.'),'小時','.'),'分鐘',''),1)*1
from tb
/*
格式 分钟 分钟结果
--------- ----------------- -----------
17天4小時 17*8*60+4*60=8400 8400
9天7小時 4740 4740
2天9小時30分鐘 1530 1530
9小時30分鐘 570 570
4小時 240 240
50分鐘 50 50(6 行受影响)*/直接查询真是麻烦,还是用蓉儿的函数吧.
-- -----------t_mac 小编-------------
---希望有天成为大虾----
-- =========================================IF OBJECT_ID('tb') IS NOT NULL
DROP TABLE tb
GO
CREATE TABLE tb(格式 varchar(30))
go
insert tb SELECT
'17天4小時' UNION ALL SELECT
'9天7小時' UNION ALL SELECT
'2天9小時30分钟' UNION ALL SELECT
'9小時30分钟' UNION ALL SELECT
'4小時' UNION ALL SELECT
'50分钟'
go
select 格式,
分钟=substring(格式,1,case when CHARINDEX('天',格式)<>0 then CHARINDEX('天',格式)-1 else 0 end)*8*60 +
substring(格式,CHARINDEX('天',格式)+1,case when CHARINDEX('小時',格式)=0 then 0 else CHARINDEX('小時',格式)-CHARINDEX('天',格式)-1 end )*60 +
case when CHARINDEX('分钟',格式)=0 then 0
when CHARINDEX('分钟',格式)<>0 and CHARINDEX('小時',格式)<>0 then SUBSTRING(格式 ,charindex('時' ,格式)+1,charindex('分' ,格式)-charindex('時' ,格式)-1)
when CHARINDEX('分钟',格式 )<>0 and CHARINDEX('小時',格式 )=0 and CHARINDEX('天',格式 )<>0 then SUBSTRING(格式 ,charindex('天' ,格式)+1,charindex('分' ,格式)-charindex('天' ,格式)-1)
when CHARINDEX('分钟',格式)<>0and CHARINDEX('小時',格式 )=0 and CHARINDEX('天',格式 )=0 then SUBSTRING(格式,1,charindex('分' ,格式)-1)
end
from tb go
/*------------
格式 分钟
------------------------------ -----------
17天4小時 8400
9天7小時 4740
2天9小時30分钟 1530
9小時30分钟 570
4小時 240
50分钟 50(6 行受影响)-------*/