我想在一個字串中找到多個數字。
| ID | STRING1 | STRING2。|
|---|---|---|
| 1 | 100,101,201 | 1,2,3,4 |
| 2 | 100,103,201 | 100,103,201 |
| 3 | 101,102,200 | 101,102,200 |
例如,我想獲得包含STRING1(100,201)和STRING2(1,4)的行的ID
。結果:ID 1和ID 2
。非常感謝您的幫助! 衷心的問候。 Max
uj5u.com熱心網友回復:
這里有一個方法--保持事情的條理性以方便維護。我假設Oracle 12.1或更高版本,所以我可以使用JSON函式(快速完成分割串列的作業);在舊版本中,你必須以不同的方式撰寫函式,但概念是一樣的。
我們的想法是撰寫一個函式來分割數字串列并回傳一個嵌套表。你需要一個全域(模式級)型別,所以我首先定義了這個型別,然后是函式。然后我展示了一個示例表(你與我們分享的那個)以及查詢的樣子。
創建模式級型別和輔助函式
create or替換型別tbl_of_num is table of number;
/
創建 或替換函式 str_to_tbl(s varchar2)
return tbl_of_num
決定性的。
是
pragma udf;
ton tbl_of_num;
begin
select cast(collect(val) as tbl_of_num)
into ton
from json_table('[' || s || '] ', '$[*]' columns val number path '$')。)
return ton;
end;
/>
創建用于測驗的小表
create table t (id, string1, string2) as
select 1, '100、101、201', '1, 2,3,4' from double union all
select 2, '100、103、201', '1, 4,9,10' from double union all
select 3, '101、102、200', '1、3、4、10' from double
;
示例查詢
首先,我定義了兩個系結變數,并初始化了它們。這是你在SQL*Plus中的做法;你可能有其他方法來傳遞值給系結變數(取決于你的應用程式、用戶界面等)
variable string1 varchar2(100)
變數string2 varchar2(100)
exec :string1 := '100,201'; :string2 := '1,4'
查詢和輸出:
select id
from t
where str_to_tbl(:string1) submultiset of str_to_tbl(string1)
and str_to_tbl(:string2) submultiset of str_to_tbl(string2)
;
身份證
----------
1 ;ID
2 2
uj5u.com熱心網友回復:
這是個可怕的資料模型。 一種方法是使用like:
select t.*
from t.
where ',' || string1 || ' 。 ' like '%,100,%' and
',' || string1 || ' 。 ' like '%,201,%' and
',' || string2 || ' 。 ' like '%,1,%' and
',' || string2 || ' 。 ' like '%,4,%' ;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/306848.html
標籤:
