首頁 > 資料庫 > mysql教程 > master..spt_values如何在SQL Server中有效率地分割逗號分隔值?

master..spt_values如何在SQL Server中有效率地分割逗號分隔值?

Susan Sarandon
發布: 2024-12-30 14:20:11
原創
558 人瀏覽過

How Can master..spt_values Efficiently Split Comma-Separated Values in SQL Server?

使用master..spt_values 拆分列

背景:查找表和投影

Master..spt_values 是Microsoft SQL Server 中的系統表,包含系統儲存過程所使用的各種查找和投影表。它透過提供預先定義的數字、位元遮罩和其他常用值序列來實現高效的資料操作。

查找表允許將數值擴展為其對應的字串表示形式,例如將鎖定類型從數字轉換為名稱。另一方面,投影表提供了一種迭代一系列值的方法,這對於將列拆分為多行非常有用。

Type = "P": Projection Table

在master中輸入「P」..spt_values表示一個投影表。 它包含從0到2047的連續數字序列。此表可以有效地透過各種操作(例如計數或聚合)投影一組值。

使用類型「P」進行列拆分的好處

使用master..spt_values 的好處(輸入「P」)用於分割CSV列在於它的性能和效率。透過利用預先計算的數字序列,SQL Server 可以避免建立和插入臨時表,如果序列是動態產生的,則這是必要的。這可以顯著提高執行列拆分操作的查詢的執行速度。

程式碼範例

相關程式碼示範如何使用master..spt_values 將CSV 欄位拆分為多行:

SELECT
    T.col1, RIGHT(LEFT(T.col4,Number-1),
    CHARINDEX(',',REVERSE(LEFT(','+T.col4,Number-1))))
FROM
    master..spt_values,
    table1 T
WHERE
    Type = 'P' AND Number BETWEEN 1 AND LEN(T.col4)+1 AND
    (SUBSTRING(T.col4,Number,1) = ','
    -- OR SUBSTRING(T.col4,Number,1)  = '') --this does not work correctly anyway
登入後複製

此程式碼利用master..spt_values 中的類型「P」表來建立一個數字序列, соответствует CSV 列(col4) 中的每個字元。然後,它使用這些數字根據逗號分隔符號將列拆分為行。

以上是master..spt_values如何在SQL Server中有效率地分割逗號分隔值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板