在SQL中分割逗號分隔的行
在SQL中,您可能會遇到需要將包含逗號分隔值的欄位分割為單一行的場景。這可以透過多種技術實現,包括純SQL查詢或外部工具。
一種在純SQL中分割逗號分隔行的有效方法是結合使用SUBSTRING_INDEX()
和CROSS JOIN
函數。 SUBSTRING_INDEX()
函數根據指定的定界符和位置從給定字串中提取子字串。 CROSS JOIN
函數將來自不同表的多個行相乘,並建立笛卡爾積。
利用這些函數,您可以產生一個數字序列並對其進行迭代。對於每個數字,您可以使用SUBSTRING_INDEX()
函數從來源列中提取所需的逗號分隔值。這是一個範例查詢:
<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value FROM table1 t CROSS JOIN ( SELECT a.N + b.N * 10 + 1 n FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b ORDER BY n ) n WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>
此查詢建立一個從1到100的數字序列並對其進行迭代,以從每個來源行中提取逗號分隔的值。 SUBSTRING_INDEX()
函數用於根據序列中數字的位置提取所需的值。 WHERE
子句確保只擷取存在的逗號分隔值,避免越界錯誤。
或者,您可以使用持久化的計數表來產生數字序列並簡化查詢。產生的查詢將類似於上面的查詢,但子查詢將被對計數表的引用取代。
總而言之,這些技術可讓您在SQL中分割逗號分隔的行,而無需複雜的查詢或外部工具。方法的選擇取決於應用程式的特定要求和效能考慮。
以上是如何在 SQL 中拆分逗號分隔的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!