[英]How to split a varchar column as multiple values in SQL?
我有這個SQL Select語句
SELECT
AD_Ref_List.Value
FROM AD_Ref_List
WHERE AD_Ref_List.AD_Reference_ID= 1000448
這是SELECT的結果:
為了限制所選行,我有一對夫婦存儲在其他表中這樣的值:
SELECT xx_insert.XX_DocAction_Next
FROM xx_insert
WHERE xx_insert_id = 1000283
因此,我最終的SQL Select是這樣的:
SELECT
AD_Ref_List.Value
FROM AD_Ref_List
WHERE AD_Ref_List.AD_Reference_ID= 1000448
AND AD_Ref_List.Value IN
(SELECT xx_insert.XX_DocAction_Next
FROM xx_insert
WHERE xx_insert_id = 1000283
)
;
問題:此SELECT不返回任何行,因為Oracle已經這樣轉換: AD_Ref_List.Value IN ('CO,VO')
但是,我需要的是: AD_Ref_List.Value IN ('CO','VO')
我怎樣才能做到這一點???
最好的祝福
將值包裝在定界列表中使用的定界符中,然后檢查它是否是定界列表的子字符串(還包含定界符):
SELECT r.Value
FROM AD_Ref_List r
INNER JOIN xx_insert x
ON ( ',' || x.XX_DocAction_Next || ',' LIKE '%,' || r.value || ',%' )
WHERE r.AD_Reference_ID = 1000448
AND x.xx_insert_id = 1000283;
我必須保持邏輯在哪里
真的不是 上面的查詢將更加有效。
但是如果您必須:
SELECT Value
FROM AD_Ref_List
WHERE AD_Reference_ID = 1000448
AND value IN (
SELECT REGEXP_SUBSTR( XX_DocAction_Next, '[^,]+', 1, LEVEL )
FROM xx_insert
WHERE xx_insert_id = 1000283
CONNECT BY LEVEL <= REGEXP_COUNT( XX_DocAction_Next, '[^,]+' )
);
您可以使用REGEXP_LIKE()
:
SELECT l.value
FROM ad_ref_list l INNER JOIN xx_insert xx
ON REGEXP_LIKE(a.value, '^(' || REPLACE(xx.xx_docaction_Next, ',', '|') || '$' )
WHERE l.ad_reference_id = 1000448
AND xx.xx_insert_id = 1000283;
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.