我的数据库中有 1 个名为 fullname
的列。我想采用该名称并获取空格后的所有字符并将这些字符存储到另一列中。
我得到以下输出。
num_street_lines fullname charName
'7', 'Test Testerson abc ghi hi kkk lll ', 'TTagh'
由于有 4 个 IF 条件,因此该输出给出最多 5 个空格的字符。我想让它动态化,所以在这种情况下所需的输出将是“TTaghkl”。
SELECT
@num_street_lines := 1 + LENGTH(fullname) - LENGTH(REPLACE(fullname, ' ', '')) AS num_street_lines,
fullname,
CONCAT(
SUBSTRING(SUBSTRING_INDEX(fullname, ' ', 1), 1, 1),
IF(@num_street_lines > 1, SUBSTRING(SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 2), ' ', -1), 1, 1), ''),
IF(@num_street_lines > 2, SUBSTRING(SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 3), ' ', -1), 1, 1), ''),
IF(@num_street_lines > 3, SUBSTRING(SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 4), ' ', -1), 1, 1), ''),
IF(@num_street_lines > 4, SUBSTRING(SUBSTRING_INDEX(SUBSTRING_INDEX(fullname, ' ', 5), ' ', -1), 1, 1), '')
) as charName
FROM address;
最佳答案
您可以创建一个存储过程来将所有单词存储在临时表中。从那里你可以使用 group concat 获取它们
DELIMITER |
DROP PROCEDURE explode |
CREATE PROCEDURE explode( pDelim VARCHAR(32), pStr TEXT)
BEGIN
DROP TABLE IF EXISTS temp_explode;
CREATE TEMPORARY TABLE temp_explode (id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, word VARCHAR(40));
-- REPLACE(QUOTE("The quick brown fox jumped over the lazy dog"), " ", '\'), (\'')
SET @sql := CONCAT('INSERT INTO temp_explode (word) VALUES (', REPLACE(QUOTE(pStr), pDelim, '\'), (\''), ')');
PREPARE myStmt FROM @sql;
EXECUTE myStmt;
END |
DELIMITER ;
SET @str = "The quick brown fox jumped over the lazy dog";
SET @delim = " ";
CALL explode(@delim,@str);
SELECT group_concat(SUBSTRING(word, 1, 1) SEPARATOR '') as charName FROM temp_explode;
我有一个解决方案,但不确定您是否能负担得起存储过程和临时表。
关于mysql - 如何获取字符串(Mysql)中空格后的所有第一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57590448/