sql语句中,判断以逗号分隔的字符串中是否包含某个特定字符串,类似于判断一个数组中是否包含某一个元素,
例如:判断字段值是 ’a,b,c,d,e,f,g‘ 中是否包含 'a',sql语句如何实现?
1、mysql 字符串函数判断:
FIND_IN_SET(ele, str)
-
ele 是一个特定字符,
-
str 是一个以逗号分隔的字符串 或者 匹配这个参数的字段,
必须以逗号分隔
SELECT * FROM test WHERE FIND_IN_SET('a',str) OR FIND_IN_SET('b',str);
//ids: 以逗号分割的字符串
select * from t_user where FIND_IN_SET('26', ids);
FIND_IN_SET() 函数返回该字符串所在的位置,如果不存在就返回0,还可以用来排序。
2、ORDER BY FIND_IN_SET() 可以用来排序。
如果想让 id 按 30 27 29 这样排序
select * from t_user where id in(30,27,29) order by FIND_IN_SET(id,'30,29,27');
需求: sql语句中,判断以逗号分隔的字符串中是否包含某个特定字符串,类似于判断一个数组中是否包含某一个元素, 例如:判断 ’a,b,c,d,e,f,g‘ 中是否包含 'a',sql语句如何实现?解决 1、mysql 字符串函数判断: FIND_IN_SET(ele, str) ele 是一个特定字符, str 是一个以逗号分...
S
ELE
CT DISTINCT T.NAME,
REPLACE(REGEXP_SUB
STR
(T.TEST
STR
, '[^,]+', 1, LEVEL), ',', ' ') TEST
STR
FROM TEST2 T
WHERE 1 = 1
CONNECT BY LEVEL <= (LENGTH(T.TEST
STR
) - LENGTH(REPLACE(T.TEST
STR
, ',', '')) + 1);
-- Create table TEST2
create
USE `mess`$$
DROP PROCEDURE IF EXISTS `split
Str
ing`$$
CREATE DEFINER=`root`@`%` PROCEDURE `split
Str
ing`(IN f_
str
ing VARCHAR(1000),IN f_delimiter VARCHAR(5))
BEGIN
DECLARE cnt INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
SET
cnt = func_get_split
Str
ingTotal(f_
str
ing,f_d
dimFilterIds 是budg_template_dims 表里的一个字段, 存储的是 "abc, aa, cc" 这一类字段, 要从表里
查询
出 dimFilterIds
中
包含
aa 的记录, 则使用以下 sql:
sqlserver:
s
ele
ct * from budg_template_dims where CHARINDEX(','+ '"+ detailId +"' +...
sql语句
中
,以
逗号
分隔
的
字符串
中
是否
包含
某个特定
字符串
,类似于
判断
一个数组
中
是否
包含
某一个元素,例如:
判断
’a,b,c,d,e,f,g‘
中
是否
包含
'a',sql语句如何实现?
FIND_IN_
SET
(A,B),B是一个以
逗号
分隔
的
字符串
,A是一个特定
字符串
,该方法表示
判断
B
中
是否
包含
A。
2、
分隔
符号为其他符号
s
ele
ct * from 表名 where FIND_IN_
SET
(参数, replace(表名.`字段名` '分割符号' , ',' )) != 0 ;
s
ele
ct distinct(sub
str
ing_index(sub
str
ing_index(a.col,',',b.help_topic_id+1),',',-1))
(s
ele
ct group_concat(
可以使用
MySQL
内置的
函数
`SUB
STR
ING_INDEX` 和 `REPLACE` 来实现将一个
包含
逗号
分割的
字符串
转换为多行的 SQL 语句。
假设需要将
字符串
`'a,b,c,d,e'` 转换为多行,可以使用以下 SQL 语句:
S
ELE
CT REPLACE(SUB
STR
ING_INDEX('a,b,c,d,e', ',', n), ',', '') AS value
FROM (
S
ELE
CT 1 + units.i + tens.i * 10 AS n
FROM (
S
ELE
CT 0 AS i UNION ALL S
ELE
CT 1 UNION ALL S
ELE
CT 2 UNION ALL S
ELE
CT 3 UNION ALL S
ELE
CT 4 UNION ALL S
ELE
CT 5 UNION ALL S
ELE
CT 6 UNION ALL S
ELE
CT 7 UNION ALL S
ELE
CT 8 UNION ALL S
ELE
CT 9
) units
JOIN (
S
ELE
CT 0 AS i UNION ALL S
ELE
CT 1 UNION ALL S
ELE
CT 2 UNION ALL S
ELE
CT 3 UNION ALL S
ELE
CT 4 UNION ALL S
ELE
CT 5 UNION ALL S
ELE
CT 6 UNION ALL S
ELE
CT 7 UNION ALL S
ELE
CT 8 UNION ALL S
ELE
CT 9
) tens ON 1
WHERE n <= 1 + (LENGTH('a,b,c,d,e') - LENGTH(REPLACE('a,b,c,d,e', ',', '')))
) AS numbers;
执行以上 SQL 语句,可以得到如下结果:
value
-----
解释一下上述 SQL 语句:
1. `LENGTH('a,b,c,d,e') - LENGTH(REPLACE('a,b,c,d,e', ',', ''))` 可以得到
字符串
中
逗号
的个数,加 1 即为需要生成的多行数目。
2. `S
ELE
CT 1 + units.i + tens.i * 10 AS n` 生成一个
包含
数字序列的临时表。
3. `SUB
STR
ING_INDEX('a,b,c,d,e', ',', n)` 取出以
逗号
为
分隔
符的前 n 段
字符串
。
4. `REPLACE(SUB
STR
ING_INDEX('a,b,c,d,e', ',', n), ',', '')` 去掉
字符串
中
的
逗号
。
通过将上述 SQL 语句
中
字符串
`'a,b,c,d,e'` 替换为你要处理的
字符串
即可实现将其通过
逗号
分割并变成多行。