我有一个逗号分隔的字符串,我想在语句的“IN”子句中使用。例如:100,101,102
由于In和“IN”子句必须引用单个字符串,因此使用replace函数:例如:选择“”“||替换(“100、101、102”、“、”、“”)||“”“”来自对偶;
上面的查询可以工作,但是当我尝试使用上面的输出作为“IN”子句的输入时,它没有返回任何数据。我只受SQL语句的限制,所以我不能使用PL/SQL代码。请帮助。
select * from employee where employee_number in (
select ''''||replace('100,101,102',',',''', ''')||'''' from dual);
以上不起作用,请让我知道我错过了什么。
6条答案
按热度按时间chy5wohz1#
在这种情况下,一般的方法是将逗号分隔的列表解析为Oracle集合,并在SQL语句中使用该集合,Tom Kyte在他关于variable IN lists的讨论中有一个这样的示例。
假设您从该线程创建了myTableType类型和in_list函数,则应该能够执行以下操作
ubbxdtey2#
纯SQL,但没有经过很好的测试...
注:
功劳:StephaneFaroult的书"重构SQL应用程序"(O'Reilly)中有类似的内容
d8tt03nd3#
由于逗号分隔的值只包含数字,为什么不尝试使用这样简单的方法:
请看这个例子:
生产:
v1l68za44#
如果将整个选择格式化为字符串,则可以使用REPLACE和IN方法,然后将该字符串与OPEN refcursor FOR或EXECUTE IMMEDIATE一起使用。
8hhllhi25#
可以使用XMLTABLE将逗号分隔的字符串转换为表。
示例:
juzqafwq6#
您可以使用regexp_substr函数获得预期输出。
例如姓名:=“史密斯、艾伦、沃德、琼斯”;--此处“名称”是预期输入的变量/结果,可用于IN子句。
上面的查询遍历逗号分隔的字符串,搜索逗号(,),然后通过将逗号视为分隔符来拆分字符串。每当遇到分隔符时,它将字符串作为行返回。
这是一个参考Click Here