不一樣的 SQL Server 日期格式化

2021-03-02 dotNET跨平臺

不一樣的 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

formatnvarchar 格式模式。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/2018SELECT FORMAT (getdate(), 'dd/MM/yyyy, hh:mm:ss ') | 21/03/2018, 11:36:14SELECT FORMAT (getdate(), 'dddd, MMMM, yyyy') | Wednesday, March, 2018SELECT FORMAT (getdate(), 'MMM dd yyyy') | Mar 21 2018SELECT FORMAT (getdate(), 'MM.dd.yy') | 03.21.18SELECT FORMAT (getdate(), 'MM-dd-yy') | 03-21-18SELECT FORMAT (getdate(), 'hh:mm:ss tt') | 11:36:14 AMSELECT 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

https://docs.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql?view=sql-server-2017

https://docs.microsoft.com/ZH-CN/sql/t-sql/functions/format-transact-sql?view=sql-server-2017

https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/formatting-types

https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/

https://www.mssqltips.com/sqlservertip/2655/format-sql-server-dates-with-format-function/

http://www.cnblogs.com/firstdream/p/8074219.html

相關焦點

  • SQL Server 2019安裝教程
    1、選中下載的【sql_server_2019】軟體壓縮包,滑鼠右擊選擇【解壓到sql_server_2019】。2、雙擊打開解壓後的【sql_server_2019】文件夾。3.滑鼠右擊【sql_server_2019.iso】,選擇【打開方式】-【Windows資源管理器】。
  • SQL Server 2014
    解壓「cn_sql_server_2014_X64.iso」64位系統解壓「cn_sql_server_2014_X64.iso」。右擊「cn_sql_server_2014_X64.iso」點擊「解壓到cn_sql_server_2014_X64.iso」。
  • MySQL和SQL Server的區別
    1、mysql支持enum,和set類型,sql server不支持
  • SQL Server 安裝步驟
    本文通過圖文並茂的形式給大家介紹了SQL server 2016 安裝步驟,非常不錯,具有參考借鑑價值,需要的朋友參考下吧。
  • SQL Server 中 JSON_MODIFY 的使用
    最近在項目中很多地方欄位都是存一個 JSON 字符串,尤其是針對一些有很多不確定的屬性的數據來說,這樣的信息我們一般都放在一個 Extra 之類的欄位保存一個 JSON 字符串,由於不確定性很大,很有可能會遇到要修改這個 JSON 字符串結構的問題,在修改 JSON 對象的某一個值和修改 JSON 的結構時都會用到 JSON_MODIFY,今天就來介紹一下 JSON_MODIFY 的使用
  • 從WordPress SQLi談PHP格式化字符串問題
    php的  sprintf  或  vsprintf  函數對格式化的字符類型沒做檢查。如下代碼是可以執行的,顯然php格式化字符串中並不存在  %y  類型,但php不會報錯,也不會輸出  %y  ,而是輸出為空<?php$query = "%y";$args = 'b';echo sprintf( $query, $args ) ;?
  • Windows下Laravel 7.0連接sql server - php中文網
    laravel 7.0 默認連接 mysql, 同時項目需要連接 sql servel (另一個系統應用)$users = DB::connection (『php_sqlsrv』)->select (…);
  • Cloud SQL for SQL Server:資料庫管理的最佳實踐
    執行下列 sql 語句可查看特定資料庫的所有資料庫範圍配置:USE <dbname>;GOSELECT a.在實例級,通過選擇複選框「啟用自動存儲增長」來啟用cloud sql 實例上的自動增長。在資料庫級別,啟用自動增長是資料庫所有者的責任。有關更多信息,可查看Microsoft的配置參數文檔。更新資料庫文件自動增長設置,以使用 MB 增量而不是 % 增長率。
  • 繞過SQL Server的登錄觸發器限制
    如果身份驗證失敗,將不激發登錄觸發器。不出意外的話,它應為我們返回「Microsoft SQL Server Management Studio – Query」。SELECT APP_NAME()Get-SQLQuery -Verbose -Instance MSSQLSRV04\SQLSERVER2014 -AppName SuperApp3000 -Query 'DROP TRIGGER MyAppsOnly on all server'5.現在你不需要欺騙應用程式名稱就可以連接了。
  • 如何使用 SQL Server FILESTREAM 存儲非結構化數據?
    SqlConnection sqlConnection = new SqlConnection("Integrated Security=true;server=(local)");SqlCommand sqlCommand = new SqlCommand();sqlCommand.Connection
  • java日期和時間的格式化
    在編寫程序時,經常需要對日期進行格式化輸出。使用String類的format方法可以實現對日期和時間的格式化輸出。日期的格式化輸出Java提供了日期格式化轉換符用於支持日期的格式化輸出,格式化轉換符如下表所示: 案例1:使用API庫的Date類獲取當前日期和時間信息,並用format()方法將日期格式化為
  • SQL Server的Descending Indexes降序索引
    OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]GO 插入測試數據DECLARE @i INT;DECLARE @sql
  • SQL Server 警報(自動化運維)
    其實,SQL Server 也可以實現自動化運維,那就是 SQL Server 代理警報!什麼是警報相信很多同學使用客戶端工具SSMS時都應該看到過,甚至專業是DBA,但是有沒有考慮它有什麼用呢?請右鍵「警報」創建一個警報,類型有事件警報、性能計數器、WMI事件,這裡我選擇「WMI事件警報」。對於性能計數器的警報很簡單,這裡就不舉例說明了。
  • server sql 作業 使用專題及常見問題 - CSDN
    serverId -serverid 綁定到清單。job_name - name of the SQL Agent jobjob_name -SQL代理作業的名稱 last_run_date_time - last run date and timelast_run_date_time-上次運行的日期和時間
  • SQL Server各種日期計算
    在這篇文章裡,我將告訴你如何使用DATEADD和DATEDIFF函數來計算出在你的程序中可能你要用到的一些不同日期。  在使用本文中的例子之前,你必須注意以下的問題。大部分可能不是所有例子在不同的機器上執行的結果可能不一樣,這完全由哪一天是一個星期的第一天這個設置決定。第一天(DATEFIRST)設定決定了你的系統使用哪一天作為一周的第一天。
  • SpringBoot 全局日期格式化(基於註解)
    Cat哥領讀:json數據中的時間格式化一直都是程式設計師頭疼的問題,這裡看作者怎麼使用 @JsonComponent來處理日期。
  • SQL Server之索引解析(二)
    如果葉子節點不夠多時,根節點(Root Node)、中間節點(Branch Nodes)將不存在。根節點、中間節點行結構系統頭部信息(2位元組)+Key+&+PageId葉子節點參見行數據結構一部分不需要建立索引,減少索引層數。2、建立索引規則建立聚集索引規則唯一性:如果非唯一性,索引節點會增加一列唯一表示。靜態的: 如果對聚集索引鍵值進行更新時,中間節點頁會發生變化,葉子節點頁也會發生變化。操作次數增加,頁空間造成浪費。
  • Golang - template模板中格式化日期
    在Go語言渲染html頁面的時候,經常需要對日期進行格式化,一種可以在渲染之前,就將變量轉換成對應的字符串;另一種根據template的語法在渲染模板的時候進行格式化。語法:{{ .<vaiable>.Format <layout>}}變量後面加Format 格式layout格式跟time包裡面的定義是一樣的:月份 1,01,Jan,January日 2,02,_2時 3,03,15,PM,pm,AM,am分 4,04秒 5,05年 06,2006
  • SQL Server應用程式的高級Sql注入
    [概 要] 這篇文章討論常用的"sql注入"技術的細節,應用於流行的Ms IIS/ASP/SQL-Server平臺。這裡探討有關這種攻擊各種可以注入程序訪問數據和資料庫防範的方法。在其他SQL方言中,使用著各種分隔符,比如MS Jet DBMS引擎,日期可以用'#'符號來分隔。 其次,避免單引號並不像開始我們想像的那樣是必要的解決辦法,原因下面討論。 我們將以Active Server Pages(ASP)登陸頁面為例子來詳細說明,它訪問一個Sql-Server資料庫並且驗證一個到我們假想的程序的訪問。
  • 5分鐘學會SQL SERVER行轉列、列轉行,PIVOT操作
    但是需要注意的是,UNPIVOT 並不完全是 PIVOT 的逆操作。PIVOT 執行聚合,並將多個可能的行合併為輸出中的一行。UNPIVOT 不重現原始表值表達式的結果,因為行已被合併。本文項目地址:https://github.com/firewang/sql50參考網址:https://docs.microsoft.com/zh-cn/sql/t-sql/queries/from-using-pivot-and-unpivot