处理字符串_14_SQL处理IN和合并后字符串案例详解
Posted ShenLiang2025
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理字符串_14_SQL处理IN和合并后字符串案例详解相关的知识,希望对你有一定的参考价值。
SQL 处理IN和合并字符串
需求概述
查询以逗号隔开的员工编号列表数据里对应的员工编号、员工名称、工资、部门编号。如传来的员工列表是'7654,7698,7782,7788'。
注:表和数据详见
SQL 100+个最佳入门案例实践(覆盖Oralce、SQL Server、mysql)之基础操作_1_检索数据_数据科学汇集-CSDN博客7.1 数据集见如下SQL,以Oracle为例:-- DROP TABLE EMP;-- DROP TABLE DEPT;-- DROP TABLE BONUS;-- DROP TABLE SALGRADE;CREATE TABLE DEPT(DEPTNO NUMBER(2) NOT NULL CONSTRAINT pk_dept_deptno primary key,DNAME Vhttps://shenliang.blog.csdn.net/article/details/70145965
问题分析
首先SQL是不能直接处理合并后的字符串的数据,但是如果把合并的字符串转成单个的值并组成集合是可以的。
SQL代码
-- 方法一 通过构造自增表结合substring_index拆分字符串。
select empno, ename, sal, deptno
from emp
where empno in
(
select substring_index(
substring_index(list.vals,',',iter.pos),',',-1) empno
from (SELECT ORDINAL_POSITION pos FROM information_schema.`COLUMNS`
WHERE TABLE_NAME = 'table_lock_waits_summary_by_table') as iter,
(select '7654,7698,7782,7788' as vals
from dual) list
where iter.pos <=
(length(list.vals)-length(replace(list.vals,',','')))+1
)
-- 方法二 类似方法一,这里将顶定义个拆分函数,然后遍历。
WITH CTE AS
(SELECT '7654,7698,7782,7788' str)
select empno, ename, sal, deptno
from emp
where empno in
(
SELECT split_string(str,',',num) splitstr
FROM
(
SELECT str,LENGTH(str) - LENGTH(REPLACE(str,',','')) +1 len
FROM CTE
)A
JOIN
( -- 构造自增辅助表,最大值为70左右。
SELECT ORDINAL_POSITION num FROM information_schema.`COLUMNS`
WHERE TABLE_NAME = 'table_lock_waits_summary_by_table'
)B
ON B.num <=A.len
)
执行结果
以上是关于处理字符串_14_SQL处理IN和合并后字符串案例详解的主要内容,如果未能解决你的问题,请参考以下文章