如何选择字符串的一个字符作为单独的行 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 < 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 WHERE LIKE 语句:如何删除表中列子字符串不等于所需子字符串的行?