不一樣的 SQL Server 日期格式化
Intro
最近統計一些數據,需要按天/按小時/按分鐘來統計,涉及到一些日期的格式化,網上看了一些文章大部分都是使用 CONVERT
來轉換的,SQL Server 從 2012 開始增加了 FORMAT
方法,可以使用 FORMAT
來格式化日期,更標準化,更具可定制性,而且和 C# 裏的日期格式化差不多,可以直接把 C# 裏日期的格式直接拿過來用
FORMAT
介紹
FORMAT
適用於數字和日期類型數據的格式化,其他數據類型不支持,其他類型數據轉換請使用 CONVERT
和 CAST
去轉換。
語法
FORMAT ( value, format [, culture ] )
-
value
支持格式化的數據類型的表達式。
下表列出了 value 參數可接受的數據類型,其中還有相關的 .NET Framework 映射等效類型。類別 | 類型 | .NET 類型
-------------------------------
數字 | BIGINT | Int64
數字 | INT | Int32
數字 | SMALLINT | Int16
數字 | TINYINT | Byte
數字 | Decimal | Decimal
數字 | NUMERIC | Decimal
數字 | FLOAT | double
數字 | REAL | Single
數字 | SMALLMONEY | Decimal
數字 | money | Decimal
日期和時間 | date | DateTime
日期和時間 | time | TimeSpan
日期和時間 | DATETIME | DateTime
日期和時間 | smalldatetime | DateTime
日期和時間 | datetime2 | DateTime
日期和時間 | datetimeoffset | DateTimeOffset -
format
nvarchar 格式模式。
format 參數必須包含一個有效的 .NET Framework 格式字符串,要麽作為標準格式字符串(例如,“C”或“D”),要麽作為日期值和數值的自定義字符模式(例如,“MMMM DD, yyyy (dddd)”)。 不支持組合格式。 有關這些格式模式的完整解釋,請查閱有關常規字符串格式、自定義日期和時間格式以及自定義數字格式的 .NET Framework 文檔。 -
culture
指定區域性的可選 nvarchar 參數。
如果未提供 culture 參數,則使用當前會話的語言。 可以使用 SET LANGUAGE 語句隱式或顯式設置此語言。 culture 接受 .NET Framework 支持的任何區域性作為參數;它不局限於 SQL Server 顯式支持的語言。 如果 culture 參數無效,FORMAT 將引發錯誤。
返回值類型是 NVARCHAR
或者 NULL
示例
Query | Sample output
SELECT FORMAT (getdate(), ‘dd/MM/yyyy ‘) | 21/03/2018
SELECT FORMAT (getdate(), ‘dd/MM/yyyy, hh:mm:ss ‘) | 21/03/2018, 11:36:14
SELECT FORMAT (getdate(), ‘dddd, MMMM, yyyy‘) | Wednesday, March, 2018
SELECT FORMAT (getdate(), ‘MMM dd yyyy‘) | Mar 21 2018
SELECT FORMAT (getdate(), ‘MM.dd.yy‘) | 03.21.18
SELECT FORMAT (getdate(), ‘MM-dd-yy‘) | 03-21-18
SELECT FORMAT (getdate(), ‘hh:mm:ss tt‘) | 11:36:14 AM
SELECT FORMAT (getdate(), ‘d‘,‘us‘) | 03/21/2018
和 C# 代碼裏的格式化格式一致,可以直接使用 C# 裏的日期時間格式,數字格式
例子1SELECT FORMAT (getdate(), ‘yyyyMMddHHmmss‘) >> 20190218033523
SELECT FORMAT (getdate(), ‘yyyy-MM-dd HH:mm:ss‘) >> 2019-02-18 03:35:23
DECLARE @d DATETIME = GETDATE();
SELECT FORMAT( @d, ‘dd/MM/yyyy‘, ‘en-US‘ ) AS ‘DateTime Result‘
,FORMAT(123456789,‘###-##-####‘) AS ‘Custom Number Result‘;
例子2
output:
DateTime Result Custom Number Result
-------------- --------------------
27/09/2012 123-45-6789
(1 row(s) affected)
不一樣的 SQL Server 日期格式化