簡體   English   中英

MySQL逗號將值分隔成多行

[英]MySQL comma separated values into multiple rows

我正在嘗試拆分字符串值,它作為參數傳遞給我的SQL函數到多行。 我嘗試了很多樣品,但我找不到正確的輸出。

這是我的代碼在這里:

DROP function if exists F_Split;
DROP TABLE if exists temp1;

CREATE TEMPORARY TABLE temp1(val CHAR(255));
DELIMITER $$
CREATE FUNCTION F_Split (x1 char(50)) 
RETURNS char(100)
DETERMINISTIC
BEGIN
DECLARE colval varchar(100);    
SET @sql = CONCAT("insert into temp1 (val) values ('", REPLACE(x1, ",", "'),('"),"');");
select val from temp1 into colval;
RETURN colval;
END$$
DELIMITER ;

select F_Split('6,4');

我用一個參數調用F_Split('6,4'),我試圖將值存儲到臨時表中,函數需要根據逗號分隔返回2行。

例外輸出:

Row1:6
Row2:4

實際輸出:空。

我知道插入語句不能正常工作,但我不知道如何解決這個問題。 我想在用戶定義函數中實現。 需要幫助! 謝謝

用戶定義函數的返回類型是char(100),而不是包含2行的表...

無論如何,函數無法返回表,請參閱此處接受的返回類型https://dev.mysql.com/doc/refman/5.7/en/create-function-udf.html

也許您可以創建一個存儲過程來填充具有拆分值的臨時表,但是不能在select語句中調用存儲過程

你也可以使用這樣的查詢。 列id僅用於測試。 如果要分割多於4的值,則必須修改UNION以及CONCAT字符串',,,,'

SELECT
    id
    , SUBSTRING_INDEX( SUBSTRING_INDEX(val, ',', id), ',', -1) AS myvalue
FROM (
    SELECT 1 AS id UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
) cnt
CROSS JOIN (SELECT CONCAT('123,456,6678',',,,,') AS val) AS c
HAVING myvalue <> '';

樣品

mysql> SELECT
    ->     id
    ->     , SUBSTRING_INDEX( SUBSTRING_INDEX(val, ',', id), ',', -1) AS myvalue
    -> FROM (
    ->     SELECT 1 AS id UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
    -> ) cnt
    -> CROSS JOIN (SELECT CONCAT('123,456,6678',',,,,') AS val) AS c
    -> HAVING myvalue <> '';
+----+---------+
| id | myvalue |
+----+---------+
|  1 | 123     |
|  2 | 456     |
|  3 | 6678    |
+----+---------+
3 rows in set (0,00 sec)

mysql>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM