zoukankan      html  css  js  c++  java
  • SQL常用自定义函数

    --************************************将数字年月日变换成中文
     
    CREATE FUNCTION ymdseq
    (@ymd datetime)
    RETURNS varchar(24)
    AS
    BEGIN
    declare @x varchar(2),@y varchar(2),@yy varchar(4),@dd varchar(6),@z varchar(2),@e varchar(2),@r varchar(2),@t varchar(2)
     
    set @e=case when left(datepart(year,@ymd),1)='1' then '一'   when left(datepart(year,@ymd),1)='2' then '二'   when left(datepart(year,@ymd),1)='3' then '三'   when left(datepart(year,@ymd),1)='4' then '四' 
                           when left(datepart(year,@ymd),1)='5' then '五'   when left(datepart(year,@ymd),1)='6' then '六'   when left(datepart(year,@ymd),1)='7' then '七'   when left(datepart(year,@ymd),1)='8' then  '八' 
                           when left(datepart(year,@ymd),1)='9'  then '九' end
     
    set @z=case when substring(cast(datepart(year,@ymd) as varchar(4)),2,1)='1' then '一'   when substring(cast(datepart(year,@ymd) as varchar(4)),2,1)='2' then '二'   when substring(cast(datepart(year,@ymd) as varchar(4)),2,1)='3' then '三'   when substring(cast(datepart(year,@ymd) as varchar(4)),2,1)='4' then '四' 
                           when substring(cast(datepart(year,@ymd) as varchar(4)),2,1)='5' then '五'   when substring(cast(datepart(year,@ymd) as varchar(4)),2,1)='6' then '六'   when substring(cast(datepart(year,@ymd) as varchar(4)),2,1)='7' then '七'   when substring(cast(datepart(year,@ymd) as varchar(4)),2,1)='8' then  '八' 
                           when substring(cast(datepart(year,@ymd) as varchar(4)),2,1)='9'   then '九' when substring(cast(datepart(year,@ymd) as varchar(4)),2,1)='0' then '零'  end
     
    set @r=case when substring(cast(datepart(year,@ymd) as varchar(4)),3,1)='1' then '一'   when substring(cast(datepart(year,@ymd) as varchar(4)),3,1)='2' then '二'   when substring(cast(datepart(year,@ymd) as varchar(4)),3,1)='3' then '三'   when substring(cast(datepart(year,@ymd) as varchar(4)),3,1)='4' then '四' 
                           when substring(cast(datepart(year,@ymd) as varchar(4)),3,1)='5' then '五'   when substring(cast(datepart(year,@ymd) as varchar(4)),3,1)='6' then '六'   when substring(cast(datepart(year,@ymd) as varchar(4)),3,1)='7' then '七'   when substring(cast(datepart(year,@ymd) as varchar(4)),3,1)='8' then  '八' 
                           when substring(cast(datepart(year,@ymd) as varchar(4)),3,1)='9'   then '九' when substring(cast(datepart(year,@ymd) as varchar(4)),3,1)='0' then '零'   end
     
    set @t=case when substring(cast(datepart(year,@ymd) as varchar(4)),4,1)='1' then '一'   when substring(cast(datepart(year,@ymd) as varchar(4)),4,1)='2' then '二'   when substring(cast(datepart(year,@ymd) as varchar(4)),4,1)='3' then '三'   when substring(cast(datepart(year,@ymd) as varchar(4)),4,1)='4' then '四' 
                           when substring(cast(datepart(year,@ymd) as varchar(4)),4,1)='5' then '五'   when substring(cast(datepart(year,@ymd) as varchar(4)),4,1)='6' then '六'   when substring(cast(datepart(year,@ymd) as varchar(4)),4,1)='7' then '七'   when substring(cast(datepart(year,@ymd) as varchar(4)),4,1)='8' then  '八' 
                           when substring(cast(datepart(year,@ymd) as varchar(4)),4,1)='9'   then '九' when substring(cast(datepart(year,@ymd) as varchar(4)),4,1)='0' then '零'   end
     
     
     
    set @x=case when datepart(mm,@ymd) <10 then '0'+cast(datepart(mm,@ymd) as varchar(2))
    else  cast(datepart(mm,@ymd) as varchar(2)) end
     
    set @yy=case when @x='01' then '一'  when @x='02' then '二'  when @x='03' then '三'  when @x='04' then '四'  when @x='05' then '五'  when @x='06' then '六'  when @x='07' then '七'
                            when @x='08' then '八'  when @x='09' then '九'  when @x='10' then '十'  when @x='11' then '十一'  when @x='12' then '十二' end
     
    set @y=case when datepart(day,@ymd) <10 then '0'+cast(datepart(day,@ymd) as varchar(2))
    else  cast(datepart(day,@ymd) as varchar(2)) end
     
    set @dd=case when @y='01' then '一'  when @y='02' then '二'  when @y='03' then '三'  when @y='04' then '四'  when @y='05' then '五'  when @y='06' then '六'  when @y='07' then '七'
                            when @y='08' then '八'  when @y='09' then '九'  when @y='10' then '十'  when @y='11' then '十一'  when @y='12' then '十二'   when @y='13' then '十三'   when @y='13' then '十三'  
                              when @y='14' then '十四'   when @y='15' then '十五'   when @y='16' then '十六'   when @y='17' then '十七'   when @y='18' then '十八'   when @y='19' then '十九'   when @y='20' then '二十'
                              when @y='21' then  '二十一'  when @y='22' then  '二十二'   when @y='23' then  '二十三'   when @y='24' then '二十四'   when @y='25' then '二十五'   when @y='26' then '二十六'   when @y='27' then '二十七'
                             when @y='28' then '二十八'   when @y='29' then '二十九'   when @y='30' then '三十'    when @y='31' then '三十一' 
    end
     
    
    RETURN 
    @e+@z+@r+@t+'年'+@yy+'月'+@dd+'日'
    END
     
    
    --**********************************将日期转化为'2007-7-1' 的格式
    CREATE FUNCTION dat1
    (@ymd datetime)
    RETURNS varchar(13)
    AS
    BEGIN
    RETURN CAST(YEAR(@ymd) AS varchar) +'-'+case when month(@ymd)<10 then '0'+CAST(month(@ymd) AS varchar) 
    else CAST(month(@ymd) AS varchar) end
     + '-' +case when DAY(@ymd)<10 then '0'+CAST(DAY(@ymd) AS varchar) 
    else CAST(DAY(@ymd) AS varchar) end 
    END
     
    
    --**********************************取每个没字的拼音第一个字母**********************************
    create function fun_getPY(@str nvarchar(4000))
    returns nvarchar(4000)
    as
    begin
    declare @word nchar(1),@PY nvarchar(4000)
    set @PY=''
    while len(@str)>0
    begin
    set @word=left(@str,1)
    --如果非汉字字符,返回原字符
    set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901
    then (select top 1 PY from (
    select 'A' as PY,N'驁' as word
    union all select 'B',N'簿'
    union all select 'C',N'錯'
    union all select 'D',N'鵽'
    union all select 'E',N'樲'
    union all select 'F',N'鰒'
    union all select 'G',N'腂'
    union all select 'H',N'夻'
    union all select 'J',N'攈'
    union all select 'K',N'穒'
    union all select 'L',N'鱳'
    union all select 'M',N'旀'
    union all select 'N',N'桛'
    union all select 'O',N'漚'
    union all select 'P',N'曝'
    union all select 'Q',N'囕'
    union all select 'R',N'鶸'
    union all select 'S',N'蜶'
    union all select 'T',N'籜'
    union all select 'W',N'鶩'
    union all select 'X',N'鑂'
    union all select 'Y',N'韻'
    union all select 'Z',N'咗'
    ) T 
    where word>=@word collate Chinese_PRC_CS_AS_KS_WS 
    order by PY ASC) else @word end)
    set @str=right(@str,len(@str)-1)
    end
    return @PY
    end
     
    
    --**********************************格式为'200707'的月份减一**********************************
    CREATE FUNCTION GZ_YM
    (@GZ_YM VARCHAR(6))
    RETURNS varchar(6)
    AS
    BEGIN
    return
    case when RIGHT(@GZ_YM,2)='01' then CAST(LEFT(@GZ_YM,4)-1 AS VARCHAR(4))+'12'
    else  @GZ_YM-1 end
     
    END
     
    
    --**********************************格式为'200707'的月份加一**********************************
    CREATE FUNCTION GZ_YMj
    (@GZ_YM VARCHAR(6))
    RETURNS varchar(6)
    AS
    BEGIN
    return
    case when RIGHT(@GZ_YM,2)='12' then CAST(LEFT(@GZ_YM,4)+1 AS VARCHAR(4))+'01'
    else  @GZ_YM+1 end
     
    END
     
    --**********************************将时间转换为'08:11'**********************************
    CREATE FUNCTION tim
    (@ymd datetime)
    RETURNS varchar(13)
    AS
    BEGIN
    declare @x varchar(2)
    set @x=case when datepart(mi,@ymd) <10 then '0'+cast(datepart(mi,@ymd) as varchar(2))
    else  cast(datepart(mi,@ymd) as varchar(2)) end
    RETURN 
    case when @ymd is null
    then ''
    else
    cast(datepart(hh,@ymd) as varchar(2))+':'+@x
    end
    END
     
    --**********************************将'2007-5-1'的格式转换为'200705'**********************************
    CREATE FUNCTION ym
    (@ymd datetime)
    RETURNS varchar(13)
    AS
    BEGIN
    RETURN CAST(YEAR(@ymd) AS varchar)+case when month(@ymd)<10 then '0'+CAST(month(@ymd) AS varchar) 
    else CAST(month(@ymd) AS varchar) end
     
     
    END
     
    
    --**********************************将日期为15号之前的转换为上月,15号之后的转换为下月**********************************
    CREATE FUNCTION ym15
    (@ymd datetime)
    RETURNS varchar(13)
    AS
    BEGIN
    return case when datepart(day,@ymd)<=15 then dbo.ym(@ymd) else  
                                                                 case when datepart(month,@ymd)=12  then cast(cast(datepart(year,dateadd(year,1,@ymd)) as varchar(4))+cast('01' as varchar(2))  as varchar(6))
                                                                        else cast(cast(datepart(year,@ymd) as varchar(4))+cast(dateadd(month,1,@ymd) as varchar(2)) as varchar(6)) end end
     
     
    END
     
    
    --**********************************将'2007-12-10'的格式转换为'20071201'**********************************
    CREATE FUNCTION ymd
    (@ymd datetime)
    RETURNS varchar(8)
    AS
    BEGIN
    declare @x varchar(2),@y varchar(2)
     
    set @x=case when datepart(mm,@ymd) <10 then '0'+cast(datepart(mm,@ymd) as varchar(2))
    else  cast(datepart(mm,@ymd) as varchar(2)) end
     
    set @y=case when datepart(day,@ymd) <10 then '0'+cast(datepart(day,@ymd) as varchar(2))
    else  cast(datepart(day,@ymd) as varchar(2)) end
     
    
    RETURN 
    cast(datepart(yyyy,@ymd) as varchar(4))+@x+@y
    END
     
    --**********************************将'20071201' 的格式转换为'2007-12-01'**********************************
    CREATE FUNCTION ymdate
    (@ym varchar(8))
     
    RETURNS datetime
     
    AS
     
    BEGIN
    declare @x varchar(4),@y varchar(2),@z varchar(2),@d datetime
     
    set @x=left(@ym,4)
    set @y=substring(@ym,5,2)
    set @z=right(@ym,2)
     
    set @d=cast(@x+'-'+@y+'-'+@z as datetime)
    return
    @d
    END
     
    
    --**********************************当月除休息日设置 的天数**********************************
    CREATE FUNCTION ymday
    (@ym varchar(6))
    RETURNS int
    AS
    BEGIN
    declare @x int,@startd datetime,@endd datetime,@y int,@z int
    set @x=case when right(@ym,2)='01' then 31
                when right(@ym,2)='02' then
                   case when (left(@ym,4) % 4 = 0) and ((left(@ym,4) % 100 <> 0) or (left(@ym,4) % 400 = 0))
                        then 29
                   else 28
                end 
                when right(@ym,2)='03' then 31
                when right(@ym,2)='04' then 30
                when right(@ym,2)='05' then 31
                when right(@ym,2)='06' then 30
                when right(@ym,2)='07' then 31
                when right(@ym,2)='08' then 31
                when right(@ym,2)='09' then 30
                when right(@ym,2)='10' then 31
                when right(@ym,2)='11' then 30
                when right(@ym,2)='12' then 31
    else 0
    end
     
    set @startd=cast(cast(left(@ym,4) as varchar(4))+'-'+cast(right(@ym,2) as varchar(2))+'-1' as datetime)
    set @endd=cast(cast(left(@ym,4) as varchar(4))+'-'+cast(right(@ym,2) as varchar(2))+'-'+cast(@x as varchar(2)) as datetime)
     
    set @y=0
     
    while @startd<=@endd
    begin
    set @y=@y+case when datepart(weekday,@startd) in(7,1) then 1
                    else 0 end
    set @startd=dateadd(dd,1,@startd)
    end
    set @z= @x-@y
    return
    @z
    END
     
    
    --**********************************将'2007-12-01' 转换为'2007年12月01日'**********************************
    CREATE FUNCTION ymdse
    (@ymd datetime)
    RETURNS varchar(20)
    AS
    BEGIN
    declare @x varchar(2),@y varchar(2)
     
    set @x=case when datepart(mm,@ymd) <10 then '0'+cast(datepart(mm,@ymd) as varchar(2))
    else  cast(datepart(mm,@ymd) as varchar(2)) end
     
    set @y=case when datepart(day,@ymd) <10 then '0'+cast(datepart(day,@ymd) as varchar(2))
    else  cast(datepart(day,@ymd) as varchar(2)) end
     
    
    RETURN 
    cast(datepart(yyyy,@ymd) as varchar(4))+'年'+@x+'月'+@y+'日'
    END
     
    --**********************************将时间'0800' 转换为日期形式'1900-1-1 08:00:00.000'
    CREATE FUNCTION ymtime
    (@ym varchar(4))
     
    RETURNS datetime
     
    AS
     
    BEGIN
    declare @x varchar(2),@y varchar(2),@z varchar(2),@d datetime
     
    set @x=left(@ym,2)
    set @z=right(@ym,2)
     
    set @d=cast('1900-1-1 '+@x+':'+@z as datetime)
    return
    @d
    END
    

      

  • 相关阅读:
    js捕获activex事件
    any cpu ×86 ×64
    android手机设备查看/data/data
    this android sdk requires android developer toolkit version
    oracle函数获取汉字拼音的首字母
    Go语言最佳实践——异常和错误
    Go语言最佳实践——通道和并发
    Go语言最佳实践——面向对象
    对闭包的理解
    Go 的垃圾回收机制在实践中有哪些需要注意的地方(转)
  • 原文地址:https://www.cnblogs.com/xiaofengfeng/p/2530907.html
Copyright © 2011-2022 走看看