日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

oracle 不包含某个单词,SQL SELECT WHERE字段包含单词

發(fā)布時間:2025/3/17 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 不包含某个单词,SQL SELECT WHERE字段包含单词 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

相當(dāng)慢,但工作方法包括任何單詞:

SELECT * FROM mytable WHERE column1 LIKE '%word1%' OR column1 LIKE '%word2%' OR column1 LIKE '%word3%'

如果你需要所有的話出現(xiàn),使用這個:

SELECT * FROM mytable WHERE column1 LIKE '%word1%' AND column1 LIKE '%word2%' AND column1 LIKE '%word3%'

如果你想要更快的東西,你需要看看全文search,這是非常具體的每種數(shù)據(jù)庫types。

請注意,如果您使用LIKE來確定一個string是否是另一個string的子string,則必須在searchstring中轉(zhuǎn)義匹配字符的模式。

如果你的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數(shù)據(jù)庫,那么你可以使用包含查詢來實現(xiàn)這一點。 包含查詢比查詢快。

如果你需要所有的話

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所有l(wèi)ogging。

嘗試在MS SQL Server的全文索引中使用“tesarussearch”。 如果你有幾百萬條logging,這比在search中使用“%”要好得多。 tesarus有比其他內(nèi)存less量的內(nèi)存消耗。 嘗試search這個function:)

最好的方法是在表中的列上創(chuàng)build全文索引,并使用contains來代替LIKE

SELECT * FROM MyTable WHERE contains(Column1 , N'word1' ) AND contains(Column1 , N'word2' ) AND contains(Column1 , N'word3' )

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的oracle 不包含某个单词,SQL SELECT WHERE字段包含单词的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。