ORACLE将分隔数据转换为多值IN列表

本文介绍了如何在Oracle SQL中将包含逗号分隔值(CSV)的字符串转换为IN子句,以便正确过滤数值列。通过使用SUBSTR、INSTR和TO_NUMBER函数,可以将字符串如'7654,7698,7782,7788'解析成单独的数值,然后应用于WHERE子句中。" 131261500,7528248,手机IMEI号的生成原理,"['智能手机', '手机技术', '通信技术', '编码系统', '移动设备']
摘要由CSDN通过智能技术生成

看看下面的语句

select ename,sal,deptno

from emp

where empno in('7654,7698,7782,7788')

这个语句是错误的,因为DEPTNO是一个数值列,而此IN列表是一个字符串值,所以此SQL语句会失败。现在要将此字符串转换为用逗号分解的数值列表。使用如下语句可以达到目的。

select ename,sal,deptno
from emp
where empno in (
select
to_number(
rtrim(
substr(csv.emps,instr(csv.emps,',',1,pos)+1,instr(csv.emps,',',1,pos+1)-instr(csv.emps,',',1,pos))
,',')
)
from
(select ','||'7654,7698,7782,7788'||',' emps from t1) csv,
(select rownum pos from emp) iter
where iter.pos<=(length(csv.emps)-length(replace(csv.emps,',')))/length(',')-1
)

 

下面贴出来一些部分过程的结果,便于理解。

SQL> select emps,pos
  2  from
  3  (select ','||'7654,7698,7782,7788'||',' emps from t1) csv,
  4  (select rownum pos from emp) iter
  5  where iter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值