oracle 如何在“IN”子句中应用函数

kb5ga3dv  于 2023-05-28  发布在  Oracle
关注(0)|答案(2)|浏览(227)

我有一个值列表,以这种格式返回值:“名称- ID”。在Universe中,我需要在我的表和用户选择的值之间进行连接,但我的问题是在我的表中只存在ID列。
我能做到这一点:

select  t.column1, t.column2, ...
from    my_table t
where   t.id in regexp_substr(@prompt('1. Choose an element:', 'C', 'Elements\Identifiers',
                               Mono, Free, not_persistent, ), '*[[:digit:]]+$')

使用正则表达式,我得到了标识符的数字部分,并且“联接”工作正常,但是现在我需要允许多重选择。所以我的问题是有没有一种方法可以将regexp_substr应用于由prompt返回的每个值?
SQL翻译:(有没有办法做到这一点?)

select  t.column1, t.column2, ...
from    my_table t
where   t.id in regexp_substr(('FOO - 123', 'BAR - 456', 'ZOO - 789'),  '*[[:digit:]]+$')
5cg8jx4n

5cg8jx4n1#

我不确定如何使用in来实现这一点,除非使用递归CTE。但以下逻辑可能行得通:

where @prompt('1. Choose an element:', 'C', 'Elements\Identifiers', Mono, Free, not_persistent
             ) like '%- ' || t.id
rbpvctlc

rbpvctlc2#

如果在@Prompt定义中将Mono更改为Multi,则应该能够选择或输入多个值。然后,所选值将以逗号分隔的列表形式返回,就像IN子句一样。
因此,您的SQL语句将是:

select  t.column1, t.column2, ...
from    my_table t
where   t.id in regexp_substr(@prompt('1. Choose an element:', 'C', 'Elements\Identifiers', Multi, Free, not_persistent, ), '*[[:digit:]]+$')

相关问题