0

我正在尝试查找列中仅包含一个的所有记录;

例如

  1. 一个;sdasd
  2. 作为;dasd;dasd
  3. 作为;dasd;das

只会a;sdasd被退回。

我已经尝试过%;%,但它会返回所有包含;.

4

2 回答 2

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
于 2012-05-30T03:52:11.207 回答
0

其他可能性(不需要字符串操作):

FROM your_table
   WHERE col like '%;%' AND INSTR(col, ';', 1) = INSTR(col, ';', -1)
于 2012-05-30T09:29:39.873 回答