mysql - 如何获取字符串(Mysql)中空格后的所有第一个字符?

标签 mysql sql mysql-workbench

我的数据库中有 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/

相关文章:

mysql - 我必须再次将属性设置为主键吗?

mysql - 参数化 MySQL 工作台语句 : How to define variables

mysql - 使用 MySQL 工作台连接到 Nitrous.IO MySQL 服务器

mysql - 如何将SQL Server存储过程迁移到Mysql

php - mySQL 按问题分组

MYSQL 向列插入特定值

MySQL Workbench - 带有外键约束的错误 ERROR 1215 (HY000)

java - 数据源中的 Wildfly 12 错误

python - 使用 sqlalchemy 和 python ping mysql

sql - 具有属性的实体的数据建模