在 SQL 中将 VARCHAR 列拆分为多个值
问题:
检索值时从使用 IN 子句的 VARCHAR 列,Oracle 将分隔列表转换为单引号字符串,防止子查询匹配单个值。
解决方案 1:
使用相同的分隔符将分隔列表值包含在 IN 子句中在 VARCHAR 列中。例如,不要使用 AD_Ref_List.Value IN ('CO','VO'),而是使用 AD_Ref_List.Value IN (',' || 'CO' || ',' || 'VO' || ',') .
解决方案 2(替代Where子句):
使用常规基于表达式的技术,使用 REGEXP_SUBSTR 函数从指定级别的分隔列表中提取单个值。例如,以下查询使用递归来拆分分隔列表:
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, '[^,]+') );
以上是如何拆分定界 VARCHAR 列以实现高效的 SQL 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!