2012-05-30 25 views

回答

1
SELECT id 
    FROM your_table 
WHERE LENGTH(col) - LENGTH(REPLACE(col,';')) = 1; 

是一個解決方案。

另一個用途REGEXP_LIKE:

WITH q AS (SELECT 1 ID, 'a;b;c;' str FROM dual 
      UNION 
      SELECT 2, ';abc' FROM dual 
      UNION 
      SELECT 3, 'a;b;c;defg;h' FROM dual 
      UNION 
      SELECT 4, 'abcdefghi;' FROM dual 
      UNION 
      SELECT 5, 'ab;cde' FROM dual 
      UNION 
      SELECT 6, 'abcdef' FROM dual) 
SELECT * 
    FROM q 
WHERE regexp_like(str,'^[^;]*;[^;]*$'); 

     ID STR 
---------- ------------ 
     2 ;abc 
     4 abcdefghi; 
     5 ab;cde 
+0

這是非常昂貴? – seesee

+0

它可能會強制進行全表掃描。但即使是一個單一的像經常導致全表掃描,我。即col上的索引不會被使用。 – Johanna

+0

有了這個特殊的問題,您需要查看感興趣的列的每個值 - 分號可以在任何地方。根據您選擇的內容,至少需要完整的索引掃描(如果感興趣的列被索引),無論您如何進行索引掃描。 – DCookie

0

伊尼另一種可能性(沒有字符串操作是必要的):

FROM your_table 
    WHERE col like '%;%' AND INSTR(col, ';', 1) = INSTR(col, ';', -1)