2014-09-04 20 views
1

我有一個以下列格式返回值的值列表:「名稱 - ID」。在Universe中,我需要在我的表和用戶選擇的值之間進行連接,但是我的問題是在我的表中只存在ID列。如何在「IN」子句中應用函數

我能夠做到這一點:

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應用於提示返回的每個值?

SQL翻譯:(?有沒有辦法做到這一點)

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

回答

1

我不知道你會怎麼做這與in,除非你使用遞歸CTE。但是,下面的邏輯可能的工作:

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

如果您在@Prompt定義更改MonoMulti,你應該能夠選擇或輸入多個值。所選值將以逗號分隔列表的形式返回,就像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:]]+$')