我有一个逗号分隔的字符串,我想在语句的"IN"子句中使用它.例如:100,101,102
由于In和"IN"子句我必须引用个别字符串,我使用替换函数:例如:select''''|| replace('100,101,102',',',''',''')|| ''''来自双重;
但是,当我尝试使用上面的输出作为"IN"子句的输入时,上面的查询有效,它不返回任何数据.我只受SQL语句的限制,所以我不能使用PL/SQL代码.请帮助.
select * from employee where employee_number in (
select ''''||replace('100,101,102',',',''', ''')||'''' from dual);
Run Code Online (Sandbox Code Playgroud)
以上不起作用.请让我知道我错过了什么.
Jus*_*ave 11
在这种情况下,一般方法是将逗号分隔列表解析为Oracle集合,并在SQL语句中使用该集合.Tom Kyte在他对变量IN列表的讨论中有一个例子.
假设您从该线程创建myTableType类型和in_list函数,您应该可以这样做
SELECT *
FROM employee
WHERE employee_number IN (
SELECT *
FROM TABLE( in_list( p_your_comma_separated_list ) )
)
Run Code Online (Sandbox Code Playgroud)
纯SQL,但没有经过很好的测试...
select to_number(substr(postfix, 2, instr(postfix, ',' ,2)-2)) id
from (
select substr(val, instr(val, ',', 1, n)) postfix
from (select ',101,102,103,' val from dual)
, (
select level n
from dual
connect by level < 10)
where instr(val, ',', 1, n) > 0)
where instr(postfix, ',' ,2)> 2;
Run Code Online (Sandbox Code Playgroud)
编辑:改进
select substr(postfix, 1, instr(postfix, ',' ,1)-1)
from (
select substr(val, instr(val, ',',1, level)+1) postfix
from (select ',101,102,103,' val from dual)
connect by instr(val, ',', 2, level) > 0
);
Run Code Online (Sandbox Code Playgroud)
笔记:
信用:Stephane Faroult 的书“重构 SQL 应用程序”(O'Reilly)中有类似的内容
归档时间: |
|
查看次数: |
23222 次 |
最近记录: |