sql - 如何在 SQL 中将 varchar 列拆分为多个值?
问题描述
我有这个 SQL 选择语句
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
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;
我必须将逻辑保留在 whereClause 中
真的,不要。上面的查询会更有效率。
但如果你必须这样做:
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, '[^,]+' )
);
推荐阅读
- html - 左右容器未位于内容容器旁边
- python - 连接相同的字符串 x 次
- fortran - 使用 fortran PCHIP 库时的错误
- dart - Flutter - 如何从国家代码中获取国家名称?
- reactjs - 反应关键字扩展不接
- reactjs - 为什么在 react 中从 props 和 state 创建常量?
- reactjs - 为什么日期排序不能跨浏览器工作?
- google-apps-marketplace - 发布组织单位服务帐户访问市场申请
- mysql - 如何修复 xampp 和代码点火器中的“无法选择指定的数据库”
- python-3.x - 我正在使用 append 并在每个元素的末尾添加 \n