簡體   English   中英

如何在SQL中將varchar列拆分為多個值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM