请教一个问题啊!
在考勤的时候遇到如下格式的!想转换成分钟。将以下格式转化成分钟,格式都是不固定的,有天有小时有分钟,结果取合计的分钟 
按   天数 * 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 object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([格式] varchar(14))
    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 * from [tb]create function cal(@s varchar(100))
    returns int
    as
    begin
    declare @t int
    set @t=0 if charindex('天',@s)>0
    select @t=@t+480*left(@s,charindex('天',@s)-1),@s=stuff(@s,1,charindex('天',@s),'')
    if charindex('小時',@s)>0
    select @t=@t+60*left(@s,charindex('小時',@s)-1),@s=stuff(@s,1,charindex('小時',@s)+1,'')
    if charindex('分鐘',@s)>0
    select @t=@t+left(@s,charindex('分鐘',@s)-1) return @t
    end
    go
    select dbo.cal(格式) as 分鐘数 from tb
    /*
    分鐘数
    -----------
    8400
    4740
    1530
    570
    240
    50(6 行受影响)
    */
    drop function cal
      

  2.   

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

  3.   

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