/******************************************************
----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