在MySQL中,SPLIT()
和 JOIN()
函數(shù)不是內(nèi)置的函數(shù)。但是,你可以使用其他方法來實(shí)現(xiàn)類似的功能。這里有兩種方法:
SUBSTRING_INDEX()
和 GROUP_CONCAT()
函數(shù):SUBSTRING_INDEX()
函數(shù)用于從字符串中提取指定分隔符之前或之后的子字符串。GROUP_CONCAT()
函數(shù)用于將多個(gè)行連接成一個(gè)字符串。
假設(shè)我們有一個(gè)名為 my_table
的表,其中包含一個(gè)名為 name
的列,我們想要根據(jù)逗號(hào)分隔符將其拆分并連接起來。
-- 使用 SUBSTRING_INDEX() 函數(shù)拆分 name 列
SELECT SUBSTRING_INDEX(name, ',', 1) AS first_name,
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ',', 2), ',', -1) AS last_name
FROM my_table;
-- 使用 GROUP_CONCAT() 函數(shù)連接 first_name 和 last_name 列
SELECT GROUP_CONCAT(first_name, ' ', last_name SEPARATOR ', ') AS full_name
FROM (
SELECT SUBSTRING_INDEX(name, ',', 1) AS first_name,
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ',', 2), ',', -1) AS last_name
FROM my_table
) AS temp;
你還可以創(chuàng)建自定義函數(shù)來實(shí)現(xiàn)類似于 SPLIT()
和 JOIN()
的功能。例如,你可以創(chuàng)建一個(gè)名為 SPLIT_STR()
的函數(shù),該函數(shù)接受一個(gè)字符串、一個(gè)分隔符和一個(gè)索引作為參數(shù),然后返回分隔后的子字符串。
DELIMITER $$
CREATE FUNCTION SPLIT_STR(str VARCHAR(255), delim CHAR(1), pos INT)
RETURNS VARCHAR(255)
BEGIN
DECLARE i, start, end INT;
SET i = 1;
SET start = 1;
REPEAT
SET end = LOCATE(delim, str, start);
IF end = 0 THEN
SET end = LENGTH(str) + 1;
END IF;
IF i = pos THEN
RETURN SUBSTRING(str, start, end - start);
END IF;
SET start = end + 1;
SET i = i + 1;
UNTIL start > LENGTH(str) END REPEAT;
RETURN '';
END$$
DELIMITER ;
現(xiàn)在你可以使用 SPLIT_STR()
函數(shù)來拆分字符串,并使用 GROUP_CONCAT()
函數(shù)將它們連接起來。
-- 使用 SPLIT_STR() 函數(shù)拆分 name 列
SELECT SPLIT_STR(name, ',', 1) AS first_name,
SPLIT_STR(name, ',', 2) AS last_name
FROM my_table;
-- 使用 GROUP_CONCAT() 函數(shù)連接 first_name 和 last_name 列
SELECT GROUP_CONCAT(first_name, ' ', last_name SEPARATOR ', ') AS full_name
FROM (
SELECT SPLIT_STR(name, ',', 1) AS first_name,
SPLIT_STR(name, ',', 2) AS last_name
FROM my_table
) AS temp;
這樣,你就可以實(shí)現(xiàn)類似于 SPLIT()
和 JOIN()
的功能。