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