SQL Server 2012 的 T-SQL 新功能 - 日期/時間函數

本文將介紹有關 SQL Server 2012 於 T-SQL 新增的日期/時間函數。

 

SQL Server 2012 提供了多項和日期或是時間有關的函數,像是DATEFROMPARTS 、DATETIME2FROMPARTS、DATETIMEFROMPARTS、DATETIMEOFFSETFROMPARTS、EOMONTH、SMALLDATETIMEFROMPARTS、TIMEFROMPARTS 等,絕大多都是用來產生不同長度或格式的日期或時間的函數,這些函數的使用方式都相當直覺,只要依照順序填入相對應的日期或時間的值即可,像是下列的 T-SQL 敘述:

 

   1:  --DATEFROMPARTS ( year, month, day )
   2:  SELECT DateFromParts(2012,6,9)
   3:   
   4:  --DATETIME2FROMPARTS ( year, month, day, hour, minute, seconds, fractions, precision )
   5:  SELECT DateTime2FromParts(2012,6,9,13,30,0,0,0)
   6:   
   7:  --DATETIMEFROMPARTS ( year, month, day, hour, minute, seconds, milliseconds )
   8:  SELECT DateTimeFromParts(2012,6,9,13,30,0,0)
   9:   
  10:  --DATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision )
  11:  SELECT DateTimeOffSetFromParts(2012,6,9,13,30,0,0,8,0,0)
  12:   
  13:  --SMALLDATETIMEFROMPARTS ( year, month, day, hour, minute )
  14:  SELECT SmallDateTimeFromParts(2012,6,9,13,30)
  15:   
  16:  --TIMEFROMPARTS ( hour, minute, seconds, fractions, precision )
  17:  SELECT TimeFromParts(13,30,0,0,0)

 

【執行結果】

 

image

 

本文主要介紹一個筆者覺得比較實用的日期函數 - EOMONTH,該函數主要用來計算某個日期加上正/負幾個月後,回傳當月最後一天,其語法如下:

 


EOMONTH ( start_date [, month_to_add ] )

以下程式碼用來取得本月、下個月及上個月最後一天的日期,其中第 1 到 7 列為以前的做法(也許有其他種寫法,本文以下列程式碼為例),第 10 到17 列使用新的 EOMonth 函數,是不是看起來精簡而且容易閱讀呢?

 

   1:  --<以前的作法>
   2:  --回傳這個月的最後一天
   3:  SELECT DATEADD(DAY,-1,LEFT(CONVERT(CHAR(8),DATEADD(MONTH,1,GETDATE()),112),6) + '01')
   4:  --回傳下個月的最後一天,也就是八月的最後一天
   5:  SELECT DATEADD(DAY,-1,LEFT(CONVERT(CHAR(8),DATEADD(MONTH,2,GETDATE()),112),6) + '01')
   6:  --回傳上個月的最後一天,也就是六月的最後一天
   7:  SELECT DATEADD(DAY,-1,LEFT(CONVERT(CHAR(8),GETDATE(),112),6) + '01')
   8:   
   9:   
  10:  --<現在的作法>
  11:  --今天是2012/7/2
  12:  --回傳這個月的最後一天
  13:  SELECT EOMonth(GETDATE())
  14:  --回傳下個月的最後一天,也就是八月的最後一天
  15:  SELECT EOMonth(GETDATE(),1)
  16:  --回傳上個月的最後一天,也就是六月的最後一天
  17:  SELECT EOMonth(GETDATE(),-1)

 

【執行結果】

 

image

 

【參考資料】