首頁 > 資料庫 > mysql教程 > 如何在 SQL 中有效地拆分和過濾逗號分隔的 VARCHAR 欄位?

如何在 SQL 中有效地拆分和過濾逗號分隔的 VARCHAR 欄位?

DDD
發布: 2024-12-24 17:48:12
原創
178 人瀏覽過

How to Efficiently Split and Filter a Comma-Separated VARCHAR Column in SQL?

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板