在 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中文網其他相關文章!