0
我試圖找到列中只包含單個;
的所有記錄。Oracle/Hibernate像:查找只包含單個';'的字符串
例如
- 一個; sdasd
- 作爲; DASD; DASD
- 作爲; DASD; DAS
僅a;sdasd
將被返回。
我試過%;%
但它會返回所有包含;
的字符串。
我試圖找到列中只包含單個;
的所有記錄。Oracle/Hibernate像:查找只包含單個';'的字符串
例如
僅a;sdasd
將被返回。
我試過%;%
但它會返回所有包含;
的字符串。
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
伊尼另一種可能性(沒有字符串操作是必要的):
FROM your_table
WHERE col like '%;%' AND INSTR(col, ';', 1) = INSTR(col, ';', -1)
這是非常昂貴? – seesee
它可能會強制進行全表掃描。但即使是一個單一的像經常導致全表掃描,我。即col上的索引不會被使用。 – Johanna
有了這個特殊的問題,您需要查看感興趣的列的每個值 - 分號可以在任何地方。根據您選擇的內容,至少需要完整的索引掃描(如果感興趣的列被索引),無論您如何進行索引掃描。 – DCookie