SQL SERVER2008 日期格式化处理

/******************************************************

         ----0表示不包含星期;1表示包含星期

        使用方法:
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy',0)   ---2016
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy年',1)  --2016年 星期六
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy-M',0) ---2016-9
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy-MM',1)--2016-09 星期六
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy年M月',0)---2016年9月
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyyMM',0)--201609
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy.MM',0)---- 2016.09
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy.MM.dd',0)  ---2016.09.03
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy.M',0)   ---2016.9 
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy.M.d',0) ---2016.9.3
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy-MM-dd',0)  --2016-09-03
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy-M-d',0)   --2016-9-3
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy年MM月dd日',0)  --2016年09月03日
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'gyyyy年MM月dd日',0)  ---公元2016年09月03日
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy年M月d日',0)---2016年9月3日
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'gyyyy年M月d日',0)---公元2016年9月3日
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy-MM-dd HH',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyyMMddHH',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy-MM-dd H',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy年MM月dd日HH时',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy年M月d日HH时',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy年M月d日H时',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy-MM-dd HH:mm',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyyMMddHHmm',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy年MM月dd日HH时mm分',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy年M月d日H时m分',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy-MM-dd HH:mm:ss',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyyMMddHHmmss',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy年MM月dd日HH时mm分ss秒',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy年M月d日H时m分s秒',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy-MM-dd HH:mm:ss.fff',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy-M-d H:m:s.fff',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyyMMddHHmmssfff',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy年MM月dd日HH时mm分ss秒fff毫秒',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyy-MM-dd HH:mm:ss.fffffff',0)
        SELECT dbo.FormmaterDate08Version(sysdatetime(),'yyyyMMddHHmmssfffffff',0);


       
*******************************************************/

CREATE FUNCTION dbo.FormmaterDate08Version(@FormmaterExpression DATETIME2,@Style NVARCHAR(50),@IsMix bit)
RETURNS NVARCHAR(50)
AS
BEGIN
    DECLARE @result NVARCHAR(50);
    DECLARE @IsDateStyle INT;
    DECLARE @WeekStyle AS NVARCHAR(10)='星期w';
    DECLARE @WeekName AS NVARCHAR(10);
    DECLARE @FormaterDate AS NVARCHAR(50);
    DECLARE @DefaultDate AS VARCHAR(50)='';
    DECLARE @SplitStr AS VARCHAR(4)=' ';

    /*************************************

         ------定义日期相关的对象
         0.@g:公元
         1.@Year:年份
         2.@Month:月份
         3.@Day:天
         4.@Hour:小时
         5.@Minute:分钟
         6.@Second:秒钟
         7.@MiliSecond:毫秒
         8.@NaNSecond:100纳秒

    *************************************/

    DECLARE @g NVARCHAR(4);
    DECLARE @Year VARCHAR(4);
    DECLARE @Month VARCHAR(2);
    DECLARE @Day VARCHAR(2);
    DECLARE @Hour VARCHAR(2);
    DECLARE @Minute VARCHAR(2);
    DECLARE @Second VARCHAR(2);
    DECLARE @MiliSecond VARCHAR(3);
    DECLARE @NaNSecond VARCHAR(7);

    DECLARE @weekformatersets TABLE    --------------------星期数据集合
    (
       ID INT ,
       FormaterWeekDayData NVARCHAR(40)
    );
    DECLARE @dateformmatersets TABLE   --------------------日期
    (
       ID INT IDENTITY(1,1) NOT NULL,
       FormaterDateStyle NVARCHAR(40)
    );
    /**************************创建星期样式集合**************************/

    INSERT INTO @weekformatersets
    (
       ID,
       FormaterWeekDayData
    )
    VALUES
        (1,'星期日'),
        (2,'星期一'),
        (3,'星期二'),
        (4,'星期三'),
        (5,'星期四'),
        (6,'星期五'),
        (7,'星期六')

    /**************************创建日期样式集合**************************/

    INSERT INTO @dateformmatersets
    (
       FormaterDateStyle
    )
    VALUES
          ('yyyy'),
          ('yyyy年'),
          ('yyyy-M'),
          ('yyyy-MM'),
          ('yyyy年M月'),
          ('yyyyMM'),
          ('yyyy.MM'),
          ('yyyy.MM.dd'),
          ('yyyy.M'),
          ('yyyy.M.d'),
          ('yyyy-MM-dd'),
          ('yyyy-M-d'),
          ('yyyy年MM月dd日'),
          ('gyyyy年MM月dd日'),
          ('yyyy年M月d日'),
          ('gyyyy年M月d日'),
          ('yyyy-MM-dd HH'),
          ('yyyyMMddHH'),
          ('yyyy-MM-dd H'),
          ('yyyy年MM月dd日HH时'),
          ('yyyy年M月d日HH时'),
          ('yyyy年M月d日H时'),
          ('yyyy-MM-dd HH:mm'),
          ('yyyyMMddHHmm'),
          ('yyyy年MM月dd日HH时mm分'),
          ('yyyy年M月d日H时m分'),
          ('yyyy-MM-dd HH:mm:ss'),
          ('yyyyMMddHHmmss'),
          ('yyyy年MM月dd日HH时mm分ss秒'),
          ('yyyy年M月d日H时m分s秒'),
          ('yyyy-MM-dd HH:mm:ss.fff'),
          ('yyyy-M-d H:m:s.fff'),
          ('yyyyMMddHHmmssfff'),
          ('yyyy年MM月dd日HH时mm分ss秒fff毫秒'),
          ('yyyy-MM-dd HH:mm:ss.fffffff'),
          ('yyyyMMddHHmmssfffffff');

    SELECT @WeekName= FormaterWeekDayData 
    FROM  @weekformatersets WHERE ID=DATEPART(WEEKDAY,@FormmaterExpression);
    /************************设置相关的日期部分对象***************************/

    -----@FormaterDate
        SET @g='公元';
        SET @Year=CAST(DATEPART(YEAR,@FormmaterExpression) AS VARCHAR);
        SET @Month=CAST(DATEPART(MONTH,@FormmaterExpression) AS VARCHAR);
        SET @Day=CAST(DATEPART(DAY,@FormmaterExpression) AS VARCHAR);
        SET @Hour=CAST(DATEPART(HOUR,@FormmaterExpression) AS VARCHAR);
        SET @Minute=CAST(DATEPART(MINUTE,@FormmaterExpression) AS VARCHAR);
        SET @Second=CAST(DATEPART(SECOND,@FormmaterExpression) AS VARCHAR);
        SET @MiliSecond=CAST(DATEPART(MILLISECOND,@FormmaterExpression) AS VARCHAR);
        SET @NaNSecond=CAST(DATEPART(NANOSECOND,@FormmaterExpression) AS VARCHAR);

    IF @Style=@WeekStyle
      BEGIN
         SET @result=@WeekName;
      END
    ELSE
      BEGIN
         SELECT @IsDateStyle=COUNT(1) FROM @dateformmatersets 
         WHERE FormaterDateStyle=@Style;
         IF @IsDateStyle>0
            BEGIN
                 SET @FormaterDate=@Style;

                 /*****************   替换公元 *****************/
                 IF CHARINDEX('g',@FormaterDate)>0
                   BEGIN
                      SET @FormaterDate=REPLACE(@FormaterDate,'g',@g);
                   END

                /******************  替换年份  ********************/

                 IF CHARINDEX('yyyy',@FormaterDate)>0
                   BEGIN
                      SET @FormaterDate=REPLACE(@FormaterDate,'yyyy',@Year)
                   END

                /*****************  替换月份(MM) ***************/

                 IF CHARINDEX('MM',@FormaterDate)>0
                   BEGIN
                       IF LEN(@Month)=1
                         BEGIN
                            SET @Month='0'+@Month;                
                         END
                       SET @FormaterDate=REPLACE(@FormaterDate,'MM',@Month);
                   END

                /************************  替换月份(M)  ***********************/

                IF CHARINDEX('MM',@FormaterDate)=0 AND CHARINDEX('M',@FormaterDate)>0
                    BEGIN
                       SET @FormaterDate=REPLACE(@FormaterDate,'M',@Month);
                    END

                /************************  替换日期中的天(dd)  ***********************/

                IF CHARINDEX('dd',@FormaterDate)>0
                    BEGIN
                       IF LEN(@Day)=1
                          BEGIN
                              SET @Day='0'+@Day;                            
                          END
                       SET @FormaterDate=REPLACE(@FormaterDate,'dd',@Day);
                    END

                /************************** 替换日期中的天(d) *********************/

                IF CHARINDEX('d',@FormaterDate)>0 AND CHARINDEX('dd',@FormaterDate)=0
                    BEGIN
                        SET @FormaterDate=REPLACE(@FormaterDate,'d',@Day);
                    END

               /*************************  替换日期中的小时(HH)  ***********************/

                IF CHARINDEX('HH',@FormaterDate)>0
                   BEGIN
                        IF(LEN(@Hour)=1)
                           BEGIN
                               SET @Hour='0'+@Hour;
                           END
                        SET @FormaterDate=REPLACE(@FormaterDate,'HH',@Hour);
                   END

               /**************************  替换日期中的小时(H)  ***********************/

               IF CHARINDEX('H',@FormaterDate)>0 AND CHARINDEX('HH',@FormaterDate)=0
                   BEGIN
                        SET @FormaterDate=REPLACE(@FormaterDate,'H',@Hour);
                   END

                /************************* 替换日期中的分钟(mm)  ***********************/

                IF CHARINDEX('mm',@FormaterDate)>0
                   BEGIN
                        IF LEN(@Minute)=1
                           BEGIN
                              SET @Minute='0'+@Minute;
                           END
                        SET @FormaterDate=REPLACE(@FormaterDate,'mm',@Minute);
                   END

                /**********************   替换日期中的分钟(m)  ***********************/

                IF CHARINDEX('m',@FormaterDate)>0 AND CHARINDEX('mm',@FormaterDate)=0
                   BEGIN
                       SET @FormaterDate=REPLACE(@FormaterDate,'m',@Minute);
                   END

                /************************* 替换日期中的秒(ss)  ***********************/

                IF CHARINDEX('ss',@FormaterDate)>0
                   BEGIN
                        IF LEN(@Second)=1
                           BEGIN
                              SET @Second='0'+@Second;
                           END
                        SET @FormaterDate=REPLACE(@FormaterDate,'ss',@Second);
                   END

                /**********************   替换日期中的秒(s)  ***********************/

                IF CHARINDEX('s',@FormaterDate)>0 AND CHARINDEX('ss',@FormaterDate)=0
                   BEGIN
                       SET @FormaterDate=REPLACE(@FormaterDate,'s',@Second);
                   END

 

 

                IF CHARINDEX('fffffff',@FormaterDate)>0
                   BEGIN
                       SET @FormaterDate=REPLACE(@FormaterDate,'fffffff',@NaNSecond);
                   END


                /**********************  替换日期中的毫秒    **********************/

               IF CHARINDEX('fff',@FormaterDate)>0 AND CHARINDEX('fffffff',@FormaterDate)=0
                   BEGIN
                       SET @FormaterDate=REPLACE(@FormaterDate,'fff',@MiliSecond);
                   END


                /************************  判断是否是混合样式  **********************/

                IF @IsMix=1
                   BEGIN
                      SET @result=@FormaterDate+@SplitStr+@WeekName;
                   END
                ELSE
                   BEGIN
                      SET @result=@FormaterDate;
                   END
            END
        ELSE
           BEGIN
                 SET @result=@DefaultDate;
           END            
      END
    RETURN @result;
END

转载于:https://my.oschina.net/VictoryZhang/blog/886669

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值