MySQL按逗號拆分列為多行

一、SQL按逗號拆分列為多行

在實際工作中,我們經常會遇到將一列中的逗號分隔的字符串切分為多行的需求,這個需求在MySQL中可以使用正則表達式實現。

SELECT
  SUBSTRING_INDEX(SUBSTRING_INDEX(str, ',', n), ',', -1) value
FROM
  (SELECT 'A,B,C,D,E' str) t 
  INNER JOIN
  (SELECT 1 n UNION ALL SELECT 2 
   UNION ALL SELECT 3 UNION ALL SELECT 4 
   UNION ALL SELECT 5) nums 
  ON LENGTH(REPLACE(str, ',' , '')) <= LENGTH(str) - nums.n + 1;

上面的查詢語句中,我們首先使用SUBSTRING_INDEX和UNION ALL拆分了1-5行的數據,得到n表示逗號前面有n個元素,然後使用SUBSTRING_INDEX和正則表達式拆分每個元素,並使用內連接將切分後的值取出來。

二、MySQL按逗號分割字符串

MySQL提供了內置函數SUBSTRING_INDEX來實現字符串的切割,使用它可以輕鬆地實現對逗號分隔的字符串的切割。

SELECT SUBSTRING_INDEX('A,B,C,D,E', ',', 1) as first,
       SUBSTRING_INDEX(SUBSTRING_INDEX('A,B,C,D,E', ',', 2), ',', -1) as second,
       SUBSTRING_INDEX(SUBSTRING_INDEX('A,B,C,D,E', ',', 3), ',', -1) as third,
       SUBSTRING_INDEX(SUBSTRING_INDEX('A,B,C,D,E', ',', 4), ',', -1) as fourth,
       SUBSTRING_INDEX(SUBSTRING_INDEX('A,B,C,D,E', ',', 5), ',', -1) as fifth;

上述代碼中,我們按照逗號切割了逗號隔開的字符串,並通過SUBSTRING_INDEX取出每個逗號前面的數據。

三、MySQL逗號分割拆多行

使用MySQL的內置函數實現將逗號拆分為多行的方法,也是使用內置函數SUBSTRING_INDEX,使用UNION ALL,可以生成需要的行數。

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('A,B,C,D,E', ',', n), ',', -1) AS value
FROM (
    SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 
    UNION ALL SELECT 4 UNION ALL SELECT 5
) num
WHERE n <= LENGTH('A,B,C,D,E') - LENGTH(REPLACE('A,B,C,D,E', ',', '')) + 1;

上述代碼將每個逗號前面的數據拆分成一行,並通過UNION ALL生成相應的行數,從而實現逗號分割拆多行的功能。

四、MySQL按逗號拆分為數組

在MySQL中,可以使用SUBSTRING_INDEX將逗號分割的字符串轉換為數組類型的數據。

SELECT JSON_ARRAYAGG(
    SUBSTRING_INDEX(
        SUBSTRING_INDEX('A,B,C,D,E', ',', nums.n), ',', -1)
    ) AS splitted
FROM (
    SELECT 1 AS n
    UNION ALL SELECT 2
    UNION ALL SELECT 3
    UNION ALL SELECT 4
    UNION ALL SELECT 5
) nums
WHERE LENGTH(REPLACE('A,B,C,D,E', ',', '')) <= LENGTH('A,B,C,D,E') - nums.n + 1;

上述代碼中,我們使用SUBSTRING_INDEX將逗號分割的字符串轉換為數組,並使用JSON_ARRAYAGG將數組拼接成為一個完整的數組。

五、MySQL按逗號拆分列為多列

使用MySQL內置函數SUBSTRING_INDEX可以將逗號拆分列為多個列。

SELECT
    SUBSTRING_INDEX(SUBSTRING_INDEX('A,B,C,D,E', ',', 1), ',', -1) AS col1,
    SUBSTRING_INDEX(SUBSTRING_INDEX('A,B,C,D,E', ',', 2), ',', -1) AS col2,
    SUBSTRING_INDEX(SUBSTRING_INDEX('A,B,C,D,E', ',', 3), ',', -1) AS col3,
    SUBSTRING_INDEX(SUBSTRING_INDEX('A,B,C,D,E', ',', 4), ',', -1) AS col4,
    SUBSTRING_INDEX(SUBSTRING_INDEX('A,B,C,D,E', ',', 5), ',', -1) AS col5;

上述代碼將逗號分隔的字符串轉換為多列,每列存儲逗號分隔後的一個元素。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/312751.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-06 15:17
下一篇 2025-01-06 15:17

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • Python中逗號算字符嗎

    Python中逗號既可以作為分隔符,也可以作為一個表達式中的運算符。關於逗號作為分隔符是不會被算作字符的事情,這點大家都知道。本文主要就是闡述逗號作為運算符在表達式中是會被算作字符…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL數據庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28
  • CentOS 7在線安裝MySQL 8

    在本文中,我們將介紹如何在CentOS 7操作系統中在線安裝MySQL 8。我們會從安裝環境的準備開始,到安裝MySQL 8的過程進行詳細的闡述。 一、環境準備 在進行MySQL …

    編程 2025-04-27
  • Python輸出逗號分隔且最後沒逗號

    本文將從多個方面詳細闡述如何使用Python進行逗號分隔輸出並且確保最後沒有逗號。 一、字符串Join方法 字符串Join方法是Python中常用的一種實現逗號分隔輸出的方式,同時…

    編程 2025-04-27
  • Python編寫字符串最後一個字符沒有逗號

    針對這個問題,我們可以通過Python內置函數或字符串切片來解決。接下來,我們將逐步從多個方面來講解具體的解決方法。 一、使用內置函數rstrip()和slice Python提供…

    編程 2025-04-27
  • 如何使用MySQL字段去重

    本文將從多個方面為您詳細介紹如何使用MySQL字段去重並給出相應的代碼示例。 一、SELECT DISTINCT語句去重 MySQL提供了SELECT DISTINCT語句,通過在…

    編程 2025-04-27

發表回復

登錄後才能評論