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'); --兩日期差異秒的運算


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM