DECLARE @dt datetime
SET @dt=GETDATE()
--1.短日期格式:yyyy-m-d
SELECT REPLACE(CONVERT(varchar(10),@dt,120),N'-0','-')
--2.长日期格式:yyyy年mm月dd日
--A. 方法1
SELECT STUFF(STUFF(CONVERT(char(8),@dt,112),5,0,N'年'),8,0,N'月')+N'日'
--B. 方法2
SELECT DATENAME(Year,@dt)+N'年'+DATENAME(Month,@dt)+N'月'+DATENAME(Day,@dt)+N'日'
--3.长日期格式:yyyy年m月d日
SELECT DATENAME(Year,@dt)+N'年'+CAST(DATEPART(Month,@dt) AS varchar)+N'月'+DATENAME(Day,@dt)+N'日'
--4.完整日期+时间格式:yyyy-mm-dd hh:mi:ss:mmm
SELECT CONVERT(char(11),@dt,120)+CONVERT(char(12),@dt,114)
2、日期推算处理
DECLARE @dt datetime
SET @dt=GETDATE()
DECLARE @number int
SET @number=3
--1.指定日期该年的第一天或最后一天
--A. 年的第一天
SELECT CONVERT(char(5),@dt,120)+'1-1'
--B. 年的最后一天
SELECT CONVERT(char(5),@dt,120)+'12-31'
--2.指定日期所在季度的第一天或最后一天
--A. 季度的第一天
SELECT CONVERT(datetime,
CONVERT(char(8),
DATEADD(Month,
DATEPART(Quarter,@dt)*3-Month(@dt)-2,
@dt),
120)+'1')
--B. 季度的最后一天(CASE判断法)
SELECT CONVERT(datetime,
CONVERT(char(8),
DATEADD(Month,
DATEPART(Quarter,@dt)*3-Month(@dt),
@dt),
120)
+CASE WHEN DATEPART(Quarter,@dt) in(1,4)
THEN '31'ELSE '30' END)
--C. 季度的最后一天(直接推算法)
SELECT DATEADD(Day,-1,
CONVERT(char(8),
DATEADD(Month,
1+DATEPART(Quarter,@dt)*3-Month(@dt),
@dt),
120)+'1')
--3.指定日期所在月份的第一天或最后一天
--A. 月的第一天
SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+'1')
--B. 月的最后一天
SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+'1')
--C. 月的最后一天(容易使用的错误方法)
SELECT DATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt))
--4.指定日期所在周的任意一天
SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)
--5.指定日期所在周的任意星期几
--A. 星期天做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)
--B. 星期一做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)
SELECT
/**/
/*
* 输出格式: x年x周
* 如:200621
*/
Convert
(
varchar
(
4
),intYear)
+
/**/
/* 先将intYear列转成字符型 */
case
when
len
(intWeek)
=
1
/**/
/* 判断intWeek列的长度是否为1 */
then
'
0
'
+
Convert
(
varchar
(
1
),intWeek)
/**/
/* intWeek列为1位数字时转化成两位字符,最前面补0 */
else
Convert
(
varchar
(
2
),intWeek)
/**/
/* 如果是两位则直接转成字符 */
end
as
allYearWeek,
/**/
/* 给列取别名allYearWeek */
/**/
/*
* 输出格式: xxxx年xx周
* 如:2006年21周
*/
Convert
(
varchar
(
4
),intYear)
+
'
年
'
+
case
when
len
(intWeek)
=
1
then
'
0
'
+
Convert
(
varchar
(
1
),intWeek)
else
Convert
(
varchar
(
2
),intWeek)
end
+
'
周
'
as
DesYearWeek ,
/**/
/*
* 输出格式:x月x日~x月x日
* 如: 05.22~05.28
*/
right
(
replace
(strWeekBeginDate,
'
-
'
,
'
.
'
),
5
)
+
/**/
/* 先把替换为".",然后再取右边5位 */
'
~
'
+
right
(
replace
(strWeekEndDate,
'
-
'
,
'
.
'
),
5
)
as
DesDate
FROM
V_GetAllWeeks
order
by
intYear
Desc
, intWeek
Desc
输出结果:
allYearWeek DesYearWeek DesDate
200621
2006年21周
05.22
~
05.28
200620
2006年20周
05.15
~
05.21
200619
2006年19周
05.08
~
05.14
200618
2006年18周
05.01
~
05.07
200617
2006年17周
04.24
~
04.30
200616
2006年16周
04.17
~
04.23
200615
2006年15周
04.10
~
04.16
200614
2006年14周
04.03
~
04.09
200613
2006年13周
03.27
~
04.02
200612
2006年12周
03.20
~
03.26
/**/ /*
* 输出格式: x年x周
* 如:200621
*/
Convert ( varchar ( 4 ),intYear) + /**/ /* 先将intYear列转成字符型 */
case when len (intWeek) = 1 /**/ /* 判断intWeek列的长度是否为1 */
then
' 0 ' + Convert ( varchar ( 1 ),intWeek) /**/ /* intWeek列为1位数字时转化成两位字符,最前面补0 */
else
Convert ( varchar ( 2 ),intWeek) /**/ /* 如果是两位则直接转成字符 */
end
as allYearWeek, /**/ /* 给列取别名allYearWeek */
/**/ /*
* 输出格式: xxxx年xx周
* 如:2006年21周
*/
Convert ( varchar ( 4 ),intYear) + ' 年 ' +
case when len (intWeek) = 1
then
' 0 ' + Convert ( varchar ( 1 ),intWeek)
else
Convert ( varchar ( 2 ),intWeek)
end
+ ' 周 ' as DesYearWeek ,
/**/ /*
* 输出格式:x月x日~x月x日
* 如: 05.22~05.28
*/
right ( replace (strWeekBeginDate, ' - ' , ' . ' ), 5 ) + /**/ /* 先把替换为".",然后再取右边5位 */
' ~ ' +
right ( replace (strWeekEndDate, ' - ' , ' . ' ), 5 )
as DesDate
FROM V_GetAllWeeks order by intYear Desc , intWeek Desc
输出结果:
allYearWeek DesYearWeek DesDate
200621 2006年21周 05.22 ~ 05.28
200620 2006年20周 05.15 ~ 05.21
200619 2006年19周 05.08 ~ 05.14
200618 2006年18周 05.01 ~ 05.07
200617 2006年17周 04.24 ~ 04.30
200616 2006年16周 04.17 ~ 04.23
200615 2006年15周 04.10 ~ 04.16
200614 2006年14周 04.03 ~ 04.09
200613 2006年13周 03.27 ~ 04.02
200612 2006年12周 03.20 ~ 03.26