oracle 不包含某个单词,SQL SELECT WHERE字段包含单词
相當慢,但工作方法包括任何單詞:
SELECT * FROM mytable WHERE column1 LIKE '%word1%' OR column1 LIKE '%word2%' OR column1 LIKE '%word3%'
如果你需要所有的話出現,使用這個:
SELECT * FROM mytable WHERE column1 LIKE '%word1%' AND column1 LIKE '%word2%' AND column1 LIKE '%word3%'
如果你想要更快的東西,你需要看看全文search,這是非常具體的每種數據庫types。
請注意,如果您使用LIKE來確定一個string是否是另一個string的子string,則必須在searchstring中轉義匹配字符的模式。
如果你的SQL方言支持CHARINDEX ,那么使用它更容易一些:
SELECT * FROM MyTable WHERE CHARINDEX('word1', Column1) > 0 AND CHARINDEX('word2', Column1) > 0 AND CHARINDEX('word3', Column1) > 0
此外,請記住,這和接受的答案中的方法只包括子string匹配,而不是字匹配。 所以,例如,string'word1word2word3'仍然會匹配。
function
CREATE FUNCTION [dbo].[fnSplit] ( @sep CHAR(1), @str VARCHAR(512) ) RETURNS TABLE AS RETURN ( WITH Pieces(pn, start, stop) AS ( SELECT 1, 1, CHARINDEX(@sep, @str) UNION ALL SELECT pn + 1, stop + 1, CHARINDEX(@sep, @str, stop + 1) FROM Pieces WHERE stop > 0 ) SELECT pn AS Id, SUBSTRING(@str, start, CASE WHEN stop > 0 THEN stop - start ELSE 512 END) AS Data FROM Pieces )
詢問
DECLARE @FilterTable TABLE (Data VARCHAR(512)) INSERT INTO @FilterTable (Data) SELECT DISTINCT S.Data FROM fnSplit(' ', 'word1 word2 word3') S -- Contains words SELECT DISTINCT T.* FROM MyTable T INNER JOIN @FilterTable F1 ON T.Column1 LIKE '%' + F1.Data + '%' LEFT JOIN @FilterTable F2 ON T.Column1 NOT LIKE '%' + F2.Data + '%' WHERE F2.Data IS NULL
SELECT * FROM MyTable WHERE Column1 LIKE '%word1%' AND Column1 LIKE '%word2%' AND Column1 LIKE '%word3%'
更改OR為基于編輯問題。
而不是從SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 word2 word3' ,添加和之間的這些詞如:
SELECT * FROM MyTable WHERE Column1 CONTAINS 'word1 And word2 And word3'
如果你只是想find一個匹配。
SELECT * FROM MyTable WHERE INSTR('word1 word2 word3',Column1)<>0
SQL Server:
CHARINDEX(Column1, 'word1 word2 word3', 1)<>0
獲得完全匹配。 例子(';a;ab;ac;',';b;')不會得到一個匹配。
SELECT * FROM MyTable WHERE INSTR(';word1;word2;word3;',';'||Column1||';')<>0
如果你正在使用Oracle數據庫,那么你可以使用包含查詢來實現這一點。 包含查詢比查詢快。
如果你需要所有的話
SELECT * FROM MyTable WHERE CONTAINS(Column1,'word1 and word2 and word3', 1) > 0
如果你需要任何的話
SELECT * FROM MyTable WHERE CONTAINS(Column1,'word1 or word2 or word3', 1) > 0
包含需要列的types為CONTEXT的索引。
CREATE INDEX SEARCH_IDX ON MyTable(Column) INDEXTYPE IS CTXSYS.CONTEXT
為什么不使用“in”呢?
Select * from table where columnname in (word1, word2, word3)
select * from table where name regexp '^word[1-3]$'
要么
select * from table where name in ('word1','word2','word3')
SELECT * FROM MyTable WHERE Column1 Like "*word*"
這將顯示column1有部分值包含word所有logging。
嘗試在MS SQL Server的全文索引中使用“tesarussearch”。 如果你有幾百萬條logging,這比在search中使用“%”要好得多。 tesarus有比其他內存less量的內存消耗。 嘗試search這個function:)
最好的方法是在表中的列上創build全文索引,并使用contains來代替LIKE
SELECT * FROM MyTable WHERE contains(Column1 , N'word1' ) AND contains(Column1 , N'word2' ) AND contains(Column1 , N'word3' )
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的oracle 不包含某个单词,SQL SELECT WHERE字段包含单词的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OJ1002: 简单多项式求值
- 下一篇: OJ1031: 判断点在第几象限