添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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'` 替换为你要处理的 字符串 即可实现将其通过 逗号 分割并变成多行。