SQL Server 的字串分割

January 24, 2023

這篇文章會提到在 SQL Server 中實作字串分割的幾種方式,達到類似 C# Split 字串處理方法的效果。

分割字串的方法

SQL Server 2016 以前的版本,並沒有提供字串分割的函式。因此要藉由複雜一點的方法來達成:

  1. 先轉成 XML
  2. 查詢 XML,以達成欄位分割

程式碼如下:

DECLARE @Name VARCHAR(1000);
SET @Name = 'alice,bob,candy';
DECLARE @xml AS XML;
SET @xml = CONVERT(XML, '<n>' + replace(@Name, ',', '</n><n>') + '</n>') -- 將字串轉成 XML,並加上 n 標籤

SELECT T.n.value('.','varchar(10)') AS Name -- 使用 value 函式查詢 XML 的 n 節點
FROM @xml.nodes('n') T(n) 

CONVERT 可以轉換資料至不同資料類型,包含 XML。

value 則對 XML 執行 XQuery,並傳回 SQL 類型的值。XQuery 是一種用來查詢 XML 的語言,用在被放在 SQL 資料庫的 XML 資料。

執行後,上述程式碼的結果為:

Name
alice
bob
candy

參考資料

分割為左右兩欄,並取得右 (左) 方的資料

當字串被逗號分隔成左右兩欄時,以下程式碼可以用來取得右邊的資料!

DECLARE @Memo AS VARCHAR(10) = '1,2';
SELECT SUBSTRING(@Memo, CHARINDEX(',', @Memo) + 1, LEN(@Memo)) AS SecondColumn

以上的程式碼,分別使用:

  1. CHARINDEX 找到逗號所在的位置。
  2. LEN 取得字串長度。
  3. 再使用 SUBSTRING 擷取逗號後面 ~ 字串結尾的字為子字串。

若稍作調整,改成從 0 取到逗號位置前面的字,就可以改成取得字串左邊的資料!

參考資料

其它方法