您的位置:首页 > 数据库

sql server学习笔录5(T-SQL 日期处理总结)

2012-04-11 14:31 405 查看

T-SQL 日期处理总结

日期的格式、推算、运算是平时常用的,简单易错。

1. T-SQL 日期格式转换

由原始的值2012-04-03 10:57:06.127转换成以下20种常用的格式

2012-04-03

20120403

2012.04.03

04/03/2012

03/04/2012

03.04.2012

03-04-2012

03 Apr 2012

Apr 03, 2012

10:57:06

Apr  3 2012

04-03-2012

2012/04/03

20120403

03 Apr 2012

10:57:06:127

2012-4-3

2012年04月03日

2012年4月3日

2012-04-03 10:57:06:127

代码:

1:  --由2012-04-03 10:23:10.177转换成2012-04-03

2:  SELECT GETDATE() AS Val,Convert(char(11),GETDATE(),120) AS NeedVal

3:   

4:  --由2012-04-03 10:23:10.177转换成20120403

5:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 112 ) AS NeedVal

6:   

7:  --由2012-04-03 10:23:10.177转换成2012.04.03

8:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 102 ) AS NeedVal

9:   

10:  --由2012-04-03 10:23:10.177转换成04/03/2012 月日年

11:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 101 ) AS NeedVal

12:   

13:  --由2012-04-03 10:23:10.177转换成03/04/2012 日月年

14:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 103 ) AS NeedVal

15:   

16:  --由2012-04-03 10:23:10.177转换成03.04.2012 日月年

17:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 104 ) AS NeedVal

18:   

19:  --由2012-04-03 10:23:10.177转换成03-04-2012 日月年

20:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 105 ) AS NeedVal

21:   

22:  --由2012-04-03 10:23:10.177转换成03 Apr 2012 日月年

23:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 106 ) AS NeedVal

24:   

25:  --由2012-04-03 10:23:10.177转换成Apr 03, 2012

26:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 107 ) AS NeedVal

27:   

28:  --由2012-04-03 10:23:10.177转换成10:44:02

29:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 108 ) AS NeedVal

30:   

31:  --由2012-04-03 10:23:10.177转换成Apr  3 2012

32:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 109 ) AS NeedVal

33:   

34:  --由2012-04-03 10:23:10.177转换成04-03-2012

35:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 110 ) AS NeedVal

36:   

37:  --由2012-04-03 10:23:10.177转换成2012/04/03

38:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 111 ) AS NeedVal

39:   

40:  --由2012-04-03 10:23:10.177转换成20120403

41:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 112 ) AS NeedVal

42:   

43:  --由2012-04-03 10:23:10.177转换成03 Apr 2012

44:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 113 ) AS NeedVal

45:   

46:  --由2012-04-03 10:23:10.177转换成10:45:45:447

47:  select GETDATE() AS Val,CONVERT(varchar(12) , getdate(), 114 ) AS NeedVal

48:   

49:  --由2012-04-03 10:23:10.177转换成2012-4-3

50:  SELECT GETDATE() AS Val,REPLACE(CONVERT(varchar(10),GETDATE(),120),N'-0','-') AS NeedVal

51:   

52:  --由2012-04-03 10:23:10.177转换成2012年04月03日

53:  SELECT GETDATE() AS Val,STUFF(STUFF(CONVERT(char(8),GETDATE(),112),5,0,N'年'),8,0,N'月')+N'日' AS NeedVal

54:   

55:  --由2012-04-03 10:23:10.177转换成2012年4月3日

56:  SELECT  GETDATE() AS Val,DATENAME(Year,GETDATE())+N'年'+CAST(DATEPART(Month,GETDATE()) AS varchar)+N'月'+DATENAME(Day,GETDATE())+N'日' AS NeedVal

57:   

58:  --由2012-04-03 10:23:10.177转换成2012-04-03 10:23:10.177

59:  SELECT GETDATE() AS Val,CONVERT(char(11),GETDATE(),120)+CONVERT(char(12),GETDATE(),114) AS NeedVal


2. T-SQL 日期推算

给定日期,得到该年的第一天和最后一天

给定日期所在季度的第一天和最后一天

给定日期所在月份的第一天或最后一天

给定日期所在周的取星期几的日期,星期天做为一周的第1天

昨天

前天

明天

后天

上一年

下一年

上季度

下季度

上月

下月  

上周

下周

前一小时

后一小时

前一分钟

后一分钟

前一秒

后一秒

代码:

1:  --给定日期,得到该年的第一天和最后一天

2:  SELECT CONVERT(char(5),GETDATE(),120)+'1-1' AS FDATE,CONVERT(char(5),GETDATE(),120)+'12-31' LDTAE

3:   

4:  --给定日期所在季度的第一天和最后一天,两种方法算最后一天

5:  SELECT CONVERT(datetime,CONVERT(char(8),DATEADD(Month,DATEPART(Quarter,GETDATE())*3-Month(GETDATE())-2,GETDATE()),120)+'1') AS FDATE

6:      ,CONVERT(datetime,CONVERT(char(8),DATEADD(Month,DATEPART(Quarter,GETDATE())*3-Month(GETDATE()),GETDATE()),120)

7:          +CASE WHEN DATEPART(Quarter,GETDATE()) in(1,4)

8:              THEN '31'ELSE '30' END) AS LDATE

9:

10:

11:  SELECT CONVERT(datetime,CONVERT(char(8),DATEADD(Month,DATEPART(Quarter,GETDATE())*3-Month(GETDATE())-2,GETDATE()),120)+'1') AS FDATE

12:      ,DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1+DATEPART(Quarter,GETDATE())*3-Month(GETDATE()),GETDATE()),120)+'1') AS LDATE

13:   

14:  --给定日期所在月份的第一天和最后一天

15:  SELECT CONVERT(datetime,CONVERT(char(8),GETDATE(),120)+'1') AS FDATE,DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,GETDATE()),120)+'1') AS LDATE

16:   

17:  --给定日期所在周的取星期几的日期,星期天做为一周的第1天

18:  SELECT DATEADD(Day,0-(DATEPART(Weekday,GETDATE())+@@DATEFIRST-1)%7,GETDATE())

19:  SELECT DATEADD(Day,1-(DATEPART(Weekday,GETDATE())+@@DATEFIRST-1)%7,GETDATE())

20:  SELECT DATEADD(Day,2-(DATEPART(Weekday,GETDATE())+@@DATEFIRST-1)%7,GETDATE())

21:  SELECT DATEADD(Day,3-(DATEPART(Weekday,GETDATE())+@@DATEFIRST-1)%7,GETDATE())

22:  SELECT DATEADD(Day,4-(DATEPART(Weekday,GETDATE())+@@DATEFIRST-1)%7,GETDATE())

23:  SELECT DATEADD(Day,5-(DATEPART(Weekday,GETDATE())+@@DATEFIRST-1)%7,GETDATE())

24:  SELECT DATEADD(Day,6-(DATEPART(Weekday,GETDATE())+@@DATEFIRST-1)%7,GETDATE())

25:   

26:  --昨天

27:  SELECT DATEADD(Day,-1,GETDATE())

28:  --前天

29:  SELECT DATEADD(Day,-2,GETDATE())

30:  --明天

31:  SELECT DATEADD(Day,1,GETDATE())

32:  --后天

33:  SELECT DATEADD(Day,2,GETDATE())

34:   

35:  --上一年

36:  SELECT DATEADD(year,-1,GETDATE())

37:   

38:  --下一年

39:  SELECT DATEADD(year,1,GETDATE())

40:   

41:  --上季度

42:  SELECT DATEADD(quarter,-1,GETDATE())

43:   

44:  --下季度

45:  SELECT DATEADD(quarter,1,GETDATE())

46:

47:   --上月

48:  SELECT DATEADD(month,-1,GETDATE())

49:   

50:  --下月

51:  SELECT DATEADD(month,1,GETDATE())

52:

53:   --上周

54:  SELECT DATEADD(week,-1,GETDATE())

55:   

56:  --下周

57:  SELECT DATEADD(week,1,GETDATE())

58:   

59:   --前一小时

60:  SELECT DATEADD(hour ,-1,GETDATE())

61:   

62:  --后一小时

63:  SELECT DATEADD(hour ,1,GETDATE())

64:   

65:   --前一分钟

66:  SELECT DATEADD(minute,-1,GETDATE())

67:   

68:  --后一分钟

69:  SELECT DATEADD(minute,1,GETDATE())

70:   

71:   --前一秒

72:  SELECT DATEADD(second ,-1,GETDATE())

73:   

74:  --后一秒

75:  SELECT DATEADD(second ,1,GETDATE())


3. T-SQL日期运算
SELECT DATEDIFF(year, '2012-04-03', '2013-04-03'); --两日期差异年的运算

SELECT DATEDIFF(quarter, '2012-04-03', '2013-04-03'); --两日期差异季度的运算

SELECT DATEDIFF(day, '2012-04-03', '2013-04-03'); --两日期差异日的运算

SELECT DATEDIFF(week, '2012-04-03', '2013-04-03'); --两日期差异周的运算

SELECT DATEDIFF(hour, '2012-04-03', '2013-04-03'); --两日期差异小时的运算

SELECT DATEDIFF(minute, '2012-04-03', '2013-04-03'); --两日期差异分钟的运算

SELECT DATEDIFF(second, '2012-04-03', '2013-04-03'); --两日期差异秒的运算

DATEADD(DAY, -90, GETDATE()) :GETDATE()获得当前时间,以day为单位,剪掉90天,就是往前数第三个月,

InDate >= DATEADD(DAY, -90, GETDATE()) :inDate要大于剪掉90天的,就是这3个月之内的日期范围

原文链接:http://www.cnblogs.com/yiyumeng/archive/2012/04/03/2430814.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql server