本文將介紹有關 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)
【執行結果】
本文主要介紹一個筆者覺得比較實用的日期函數 - 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)
【執行結果】
【參考資料】