首頁 > 軟體

SQL Server格式轉換函數Cast、Convert介紹

2022-05-21 13:02:18

CAST、CONVERT都可以執行資料型別轉換。在大部分情況下,兩者執行同樣的功能,不同的是CONVERT還提供一些特別的日期格式轉換,而CAST沒有這個功能。

CAST是ANSI相容的,推薦使用CONVERT。

一、語法

CONVERT (data_type [ ( length ) ] , expression [ , style ])
CAST (expression AS data_type [ (length ) ])
  • data_type:目標系統所提供的資料型別,包括 bigint 和 sql_variant。不能使用使用者定義的資料型別。
  • length:nchar、nvarchar、char、varchar、binary 或 varbinary 資料型別的可選引數。
  • style:
    • 日期格式樣式,藉以將 datetime 或 smalldatetime 資料轉換為字元資料(nchar、nvarchar、char、varchar、nchar 或 nvarchar 資料型別);
    • 數位格式樣式,藉以將 float、real、money 或 smallmoney 資料轉換為字元資料(nchar、nvarchar、char、varchar、nchar 或 nvarchar 資料型別)。

二、範例

SELECT 'AB' + 1    --此語句報錯,在將 varchar 值 'AB' 轉換成資料型別 int 時失敗。
SELECT 'AB' + CONVERT(varchar,1)    --輸出 AB1
SELECT CONVERT(decimal(10,5), 12.3) --輸出12.30000
SELECT 'AB' + CAST(1 AS varchar) --輸出 AB1

CAST和CONVERT都能轉換日期:

SELECT CONVERT(DateTime,'2011-07-11')    --輸出 2011-07-11 00:00:00.000
SELECT CAST('2011-07-11' AS DateTime)    --輸出 2011-07-11 00:00:00.000

CONVERT有更多的樣式可選:

SELECT CONVERT(varchar,GETDATE(),5)    --輸出 01-07-13
SELECT CONVERT(varchar,GETDATE(),111)  --輸出 2013/07/01
SELECT CONVERT(varchar,GETDATE(),1)    --輸出 07/01/13

SELECT CAST(GETDATE() AS varchar)    --輸出 07 1 2013 9:56PM

三、轉化為日期和時間字串樣式

SELECT CONVERT(varchar,GETDATE(),102)    --輸出 2020.11.24
SELECT CONVERT(varchar,GETDATE(),111)  --輸出 2020/11/24
SELECT CONVERT(varchar,GETDATE(),120)    --輸出 2020-11-24 09:29:55
SELECT CONVERT(varchar,GETDATE(),108)    --輸出 09:29:55

在表中,左側的兩列表示將datetime或smalldatetime轉換為字元資料的style值。給style值加 100,可獲得包括世紀數位的四位年份 (yyyy)。

* 預設值(style0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始終返回世紀數位 (yyyy)。

四、轉化為XML

對於 xml 表示式,style 可能具有下表顯示的值之一 。 其他值作為 0 進行處理。

  • 0 (預設值):使用預設的分析行為,即放棄無用的空格,且不允許使用內部 DTD 子集。 
    注意: 轉換為 xml 資料型別時,SQL Server 的無用空格處理方式不同於 XML 1.0。 有關詳細資訊,請參閱建立 XML 資料的範例
  • 1:保留無用空格。 此樣式設定將預設 xml:space 處理設定為匹配 xml:space="preserve" 的行為 。
  • 2:啟用有限的內部 DTD 子集處理。 
    如果啟用,則伺服器可使用內部 DTD 子集提供的以下資訊來執行非驗證分析操作。 
    - 應用屬性的預設值 
    - 解析並展開內部實體參照 
    - 檢查 DTD 內容模型來確定語法的正確性 
    分析器忽略外部 DTD 子集。 此外,它不會評估 XML 宣告來檢視 standalone 屬性具有 yes 值還是 no 值 。 相反,它將 XML 範例解析為獨立檔案。
  • 3:保留無用空格,並啟用有限的內部 DTD 子集處理。

範例

說明如何通過 XML 資料型別和列 (SQL Server) 使用 CONVERT 將資料轉換為型別化的 XML。

1、此範例將包含空格、文字和標記的字串轉換為型別化的 XML,並刪除所有無用空格(節點之間的邊界空格):

SELECT CONVERT(XML, '<root><child/></root>')  

2、此範例將包含空格、文字和標記的類似字串轉換為型別化的 XML,並保留無用空格(節點之間的邊界空格):

SELECT CONVERT(XML, '<root>          <child/>         </root>', 1)  

3、此範例將包含空格、文字和標記的字串轉換為型別化的 XML:

SELECT CAST('<Name><FName>Carol</FName><LName>Elliot</LName></Name>'  AS XML)  

有關更多範例,請參閱建立 XML 資料的範例

到此這篇關於SQL Server格式轉換函數Cast、Convert的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com