在 SQL 中将 VARCHAR 列拆分为多个值
SQL 中的 VARCHAR 数据类型允许存储可变长度字符数据。通常,需要将 VARCHAR 列拆分为多个值,以方便数据过滤或其他操作。
考虑以下示例:
SELECT AD_Ref_List.Value FROM AD_Ref_List WHERE AD_Ref_List.AD_Reference_ID= 1000448
此查询检索名为“Value”的列来自表“AD_Ref_List”,其中列“AD_Reference_ID”等于 1000448。结果是以下列表值:
CO,VO
但是,要求是根据存储在不同表中的值来限制结果,“xx_insert”:
SELECT xx_insert.XX_DocAction_Next FROM xx_insert WHERE xx_insert_id = 1000283
此查询的结果是:
CO
挑战在于修改原始查询以合并“xx_insert”中的值,同时保持逗号分隔 格式。最初的尝试将值转换为分隔字符串:
AD_Ref_List.Value IN ('CO,VO')
这不是所需的结果。
解决方案:
解决此问题问题,IN 子句中的值应该用适当的分隔符括起来,并对照逗号分隔的列表进行检查,该列表也用分隔符:
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, '[^,]+' ) );
两种解决方案都有效地将 VARCHAR 列拆分为多个值,并根据指定的值进行过滤,解决了最初遇到的问题查询。
以上是如何在 SQL 中有效地拆分和过滤逗号分隔的 VARCHAR 列?的详细内容。更多信息请关注PHP中文网其他相关文章!