请教一个问题啊! 
在考勤的时候遇到如下格式的!想转换成分钟。 将以下格式转化成分钟,格式都是不固定的,有且只有"天","小时","分钟",结果取合计的分钟 
按  天数 * 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 非常谢谢!

解决方案 »

  1.   

    If not object_id('[tb]') is null
    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 行受影响)*/直接查询真是麻烦,还是用蓉儿的函数吧.
      

  2.   

    -- =========================================
    -- -----------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 行受影响)-------*/