mysql拆分字符串为多行(逗号等分割)

时间:2024-03-11 22:39:42

 

sql示例:
SELECT
    substring_index(substring_index(\'张三,李四,王五,赵六,杨七\',\',\',help_topic_id + 1),\',\' ,- 1) AS Id
FROM
    mysql.help_topic
WHERE
    help_topic_id < (length(\'张三,李四,王五,赵六,杨七\') - length(REPLACE (\'张三,李四,王五,赵六,杨七\', \',\', \'\')) + 1);
运行结果

 

 

解释
help_topic表

此处利用 mysql 库的 help_topic 表的 help_topic_id 来作为变量,因为 help_topic_id 是连续自增的,当然也可以用其他表的连续自增字段辅助。

 

(如果不用这个表,自己可以建立一个表,id设置成自增的)

 

涉及函数

 

  • 字符串拆分: SUBSTRING_INDEX(str, delim, count)
参数 解释
str 需要拆分的字符串
delim 分隔符,通过某字符进行拆分
count 当 count 为正数,取第 n 个分隔符之前的所有字符; 当 count 为负数,取倒数第 n 个分隔符之后的所有字符。

 

  • 替换函数:replace( str, from_str, to_str)
参数 解释
str 需要进行替换的字符串
from_str 需要被替换的字符串
to_str 需要替换的字符串

 

  • 获取字符串长度:LENGTH( str )

 

参数 解释
str 需要计算长度的字符串

 

遇到的问题

 

sql执行报错:SELECT command denied to user \'###\' for table \'help_topic\'
SELECT命令拒绝用户 \'###‘用于表’help_topic’

原因
mysql用户没有执行查询help_topic表的权限,需要root用户授权。
解决
用mysql的root账户执行 GRANT SELECT ON mysql.help_topic TO \'wp\'@\'localhost\'(给用户授予mysql.help_topic的查询权限)

 

扩展

创建用户
方式1: CREATE USER \'wp\'@\'localhost\' IDENTIFIED BY \'123456\';
方式2: GRANT USAGE ON *.* TO \'wp\'@\'localhost\' IDENTIFIED BY \'132456\';

删除用户
DROP USER \'wp\'@\'localhost\';

查询用户
SELECT DISTINCT CONCAT(\'User: \'\'\',user,\'\'\'@\'\'\',host,\'\'\';\') AS query FROM mysql.user;

用户授权
GRANT SELECT ON mysql.help_topic TO \'wp\'@\'localhost\'

取消用户授权
REVOKE SELECT ON mysql.help_topic FROM \'wp\'@\'localhost\';

查询用户授权
SHOW GRANTS FOR \'wp\'@\'localhost\';

 

 

转: https://blog.csdn.net/HELLOMRP/article/details/105270049