如何选择字符串的一个字符作为单独的行 MySQL

Posted

技术标签:

【中文标题】如何选择字符串的一个字符作为单独的行 MySQL【英文标题】:How to select one char of a string as individual row MySQL 【发布时间】:2020-06-19 10:59:15 【问题描述】:

mysql 中,如果字符串的长度未知,我将如何选择给定字符串中的每个字符作为单独的行。例如,如果我有字符串:

SET @str:='abc';

我想生成一个SELECT 声明:

rownum  char
======  ====
1       a
2       b
3       c

如果可能,我想避免使用临时表或存储过程。

【问题讨论】:

看这个答案***.com/questions/14959166/…@user1822391 或者关注这个链接w3resource.com/mysql/string-functions/… 使用准备好的程序并使用带有计数器的 sub_string 如果字符串长度有上限,则可以轻松完成。 @Nae,假设上限为 10...您建议如何完成此操作? @Raj Kumar 这个问题与我的问题无关......我希望将字符串的每个字符选择为单独的行,而不是从字符串中选择前 X 个字符。 【参考方案1】:
SELECT @var_i + 1 AS rownum, SUBSTR(@var_str, (@var_i := @var_i + 1), 1) AS `char`
FROM (SELECT (@var_str := "abc") AS _, (@var_i := 0) AS __) AS pow0
CROSS JOIN (SELECT 0 AS _ UNION ALL SELECT 0) AS pow1
CROSS JOIN (SELECT 0 AS _ UNION ALL SELECT 0) AS pow2
CROSS JOIN (SELECT 0 AS _ UNION ALL SELECT 0) AS pow3
CROSS JOIN (SELECT 0 AS _ UNION ALL SELECT 0) AS pow4 -- 8 < 10 < 16
WHERE @var_i < CHAR_LENGTH(@var_str)
;

【讨论】:

我喜欢你的想法...如果我知道上限并且不想使用存储过程和临时表。我修改了您的 SQL 语句以限制不显示带有 WHERE @var_i &lt; CHAR_LENGTH(@var_str) 的空行。【参考方案2】:

通过这个程序

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_splitstring`(IN _s TEXT)
BEGIN
DECLARE _i INTEGER;
DECLARE _n INTEGER;
DROP TABLE IF EXISTS listchar;
CREATE TEMPORARY TABLE listchar ( singlechar varchar(1));
SELECT LENGTH(_s) INTO _i;
SET _n = 0;
    loop_label:  LOOP
        IF  _n > _i THEN 
            LEAVE  loop_label;
        END  IF;

        SET  _n = _n + 1;
        INSERT INTO listchar SELECT SUBSTRING(_s,_n,1);
    END LOOP;
SELECT * FROM listchar;
DROP TABLE listchar;
END

结果:

【讨论】:

以上是关于如何选择字符串的一个字符作为单独的行 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

在mysql中将分隔字符串转换为多个值

MySQL WHERE LIKE 语句:如何删除表中列子字符串不等于所需子字符串的行?

PHP 数组作为单独的行插入 MySQL 表

在 MySQL 中的表的多个列中查找连接的字符串

MYSQL如何在一个库中或一个表中查询某一个字符,如“250”

sql截取字符串,作为表的行和列