不一樣的 SQL Server 日期格式化

WeihanLi發表於2019-02-18

不一樣的 SQL Server 日期格式化

Intro

最近統計一些資料,需要按天/按小時/按分鐘來統計,涉及到一些日期的格式化,網上看了一些文章大部分都是使用 CONVERT 來轉換的,SQL Server 從 2012 開始增加了 FORMAT 方法,可以使用 FORMAT 來格式化日期,更標準化,更具可定製性,而且和 C# 裡的日期格式化差不多,可以直接把 C# 裡日期的格式直接拿過來用

FORMAT 介紹

FORMAT 適用於數字和日期型別資料的格式化,其他資料型別不支援,其他型別資料轉換請使用 CONVERTCAST 去轉換。

語法

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# 裡的日期時間格式,數字格式

SELECT 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`;  

output:

DateTime Result  Custom Number Result  
--------------   --------------------  
27/09/2012       123-45-6789  
  
(1 row(s) affected)  

Reference

相關文章