列に1つだけ含まれているすべてのレコードを検索しようとして;
います。
例えば
- a; sdasd
- as; dasd; dasd
- as; dasd; das
のみa;sdasd
返されます。
試し%;%
ましたが、を含むすべての文字列が返されます;
。
SELECT id
FROM your_table
WHERE LENGTH(col) - LENGTH(REPLACE(col,';')) = 1;
1つの解決策です。
もう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
他の可能性(文字列操作は必要ありません):
FROM your_table
WHERE col like '%;%' AND INSTR(col, ';', 1) = INSTR(col, ';', -1)