2016-09-13 61 views
-3

有行。它們由逗號分隔的值分隔。我如何只帶一個例子。 (1)我的解決方案不起作用。sql中的語句

SELECT VB.COL  
FROM (SELECT '21,31' AS COL 
     FROM DUAL 
     UNION ALL 
     SELECT '1' AS COL 
     FROM DUAL 
     UNION ALL 
     SELECT '21,31,1' AS COL 
     FROM DUAL 
     UNION ALL 
     SELECT '156,158' AS COL 
     FROM DUAL 
    ) VB   
WHERE VB.COL LIKE '%'||1||'%'; 
+1

用你正在使用的數據庫標記你的問題。 –

+0

我認爲它的ORACLE數據庫 –

+0

你能描述一下輸出表的形式嗎? –

回答

0

將數字列表存儲爲逗號分隔的字符串是一個糟糕的主意。這不是存儲列表的SQL方式。如果您對數據庫有任何控制權,那麼創建一個適當的聯結表。

有時,我們被其他人的糟糕的設計決定所困擾。在這種情況下,你可以使用LIKE,但你應該包括分隔符:

WHERE ',' || VB.COL || ',' LIKE '%,' || 1 || ',%'; 

定界符防止「1」匹配「31」和「21」。

0

我認爲你想把輸出字符串只有'1'可用。 請讓我知道,如果我錯了。因爲不能理解你所需要的輸出。如果需要,我會相應地更改查詢。

SELECT VB.COL  
FROM (SELECT '21,31' AS COL 
FROM DUAL 
UNION ALL 
SELECT '1' AS COL 
FROM DUAL 
UNION ALL 
SELECT '21,31,1' AS COL 
FROM DUAL 
UNION ALL 
SELECT '156,158' AS COL 
FROM DUAL 
) VB   
WHERE REGEXP_LIKE (VB.COL,'^1$');