色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql一列值轉多行

張吉惟2年前11瀏覽0評論

MySQL是一種關系型數據庫管理系統,它能夠存儲和管理大量的數據。在MySQL中,有時候需要將一列值轉換成多行,以方便數據的處理和使用。下面我們來介紹如何使用MySQL將一列值轉換成多行。

-- 創建一個示例表
CREATE TABLE `demo_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`category_name` varchar(50) DEFAULT NULL,
`product_names` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 插入一些示例數據
INSERT INTO `demo_table` (category_name, product_names)
VALUES ('Category1', 'Product1, Product2, Product3'),
('Category2', 'Product4, Product5'),
('Category3', 'Product6');

上述代碼創建了一個示例表demo_table,并向其中插入了一些示例數據。

-- 查詢語句,使用SUBSTRING_INDEX和REPLACE函數將一列值轉換成多行
SELECT category_name, 
TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(product_names, ',', n.digit+1), ',', -1)) AS product_name
FROM demo_table
JOIN
(
SELECT 0 digit
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
) n
ON LENGTH(REPLACE(product_names, ',' , ''))<= LENGTH(product_names)-n.digit;

上述代碼使用SUBSTRING_INDEX和REPLACE函數將一列值轉換成了多行,它們的作用分別是:

  • SUBSTRING_INDEX(str, delim, count):返回str中第count個delim(分隔符)之前的子串。這里我們先用SUBSTRING_INDEX將整個字符串的前n個子串提取出來,再用SUBSTRING_INDEX將這些子串中的最后一個子串提取出來。
  • REPLACE(str, old, new):將str中的old(舊值)替換為new(新值)。

最終的查詢結果如下:

+---------------+--------------+
| category_name | product_name |
+---------------+--------------+
| Category1     | Product1     |
| Category1     | Product2     |
| Category1     | Product3     |
| Category2     | Product4     |
| Category2     | Product5     |
| Category3     | Product6     |
+---------------+--------------+

可以看到,每個類別下的產品被轉換成了一行一行的數據,方便我們進行更靈活的查詢和分析。