久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

搜索包含另一個字符串中所有單詞的 varchar 字段

Search a varchar field that contains all words from another string(搜索包含另一個字符串中所有單詞的 varchar 字段)
本文介紹了搜索包含另一個字符串中所有單詞的 varchar 字段的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

嘗試做一個小的存儲過程而不需要為此添加自由文本索引(SQL Server 2008)

trying to do a small stored procedure without needing to add freetext indexing just for this (SQL Server 2008)

基本上,我想查找某個字段包含參數(shù)中所有單詞的所有記錄.

Basically, I want to find all records where a certain field contains all the words from a parameter.

因此,如果在字段中我有這是一個測試字段",并且我的 SP 的參數(shù)是這個測試字段",它將返回它,就像參數(shù)是字段這個測試"一樣.

So if in the field I have "This is a test field", and the parameter to my SP would be "this test field" it would return it, as it would if the parameter was "field this test".

表很小(4000條)記錄,負(fù)載會很低,所以效率不是什么大問題.現(xiàn)在我能想到的唯一解決方案是用表值函數(shù)拆分兩個字符串并從那里開始.

The table is very small (4000) record and load will be low, so efficiency is not a big deal. Right now the only solution i can think of is to split both strings with table valued function and go from there.

有更簡單的想法嗎?

謝謝!

推薦答案

這是一個使用遞歸 CTE 的解決方案.這實(shí)際上使用了兩個單獨(dú)的遞歸.第一個將字符串拆分為標(biāo)記,第二個使用每個標(biāo)記遞歸過濾記錄.

Here is a solution using recursive CTEs. This actually uses two separate recursions. The first one splits the strings into tokens and the second one recursively filters the records using each token.

declare     
    @searchString varchar(max),
    @delimiter char;

select 
@searchString  = 'This is a test field'
,@delimiter = ' '

declare @tokens table(pos int, string varchar(max))

 ;WITH Tokens(pos, start, stop) AS (
      SELECT 1, 1, CONVERT(int, CHARINDEX(@delimiter, @searchString))
      UNION ALL
      SELECT pos + 1, stop + 1, CONVERT(int, CHARINDEX(@delimiter, @searchString, stop + 1))
      FROM Tokens
      WHERE stop > 0
    )
    INSERT INTO @tokens
    SELECT pos,
      SUBSTRING(@searchString, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS string
    FROM Tokens
    OPTION (MAXRECURSION 25000) ;

;with filter(ind, myfield) as (
    select  1,myfield from mytable where myfield like '%'+(select string from @tokens where pos = 1)+'%'    
    union all
    select  ind + 1, myfield from filter where myfield like '%'+(select string from @tokens where pos = ind + 1)+'%'    
    )

    select * from filter where ind = (select COUNT(1) from @tokens)

這花了我大約 15 秒來搜索包含 10k 條記錄的表格以查找搜索字符串 'this is a test field'..(字符串中的單詞越多,花費(fèi)的時(shí)間越長..)

This took me about 15 seconds to search a table of 10k records for the search string 'this is a test field'.. (the more words in the string, the longer it takes.. )

編輯
如果您想要模糊搜索,即即使沒有完全匹配也返回緊密匹配的結(jié)果,您可以將查詢中的最后一行修改為 -
select * from (select max(ind) as ind, myfield from filter group by myfield) t order by ind desc

'ind' 會為您提供在 myfield 中找到的搜索字符串中的單詞數(shù).

'ind' would give you the number of words from the search string found in myfield.

這篇關(guān)于搜索包含另一個字符串中所有單詞的 varchar 字段的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個子標(biāo)記轉(zhuǎn)換為具有多個分隔符的單列-SQL Server (3))
How can I create a view from more than one table?(如何從多個表創(chuàng)建視圖?)
Create calculated value based on calculated value inside previous row(根據(jù)前一行內(nèi)的計(jì)算值創(chuàng)建計(jì)算值)
How do I stack the first two columns of a table into a single column, but also pair third column with the first column only?(如何將表格的前兩列堆疊成一列,但也僅將第三列與第一列配對?) - IT屋-程序員軟件開發(fā)技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉(zhuǎn)換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: 九九在线精品视频 | 日韩精品在线视频 | 国精产品一区一区三区免费完 | 欧美性a视频 | 看a网站 | 久久69精品久久久久久国产越南 | 99精品国自产在线 | 久久久国产精品网站 | 国产一级毛片精品完整视频版 | 天天干视频| 日韩www| 亚洲欧美精品国产一级在线 | 99国产精品久久久 | 成人av一区 | 欧美国产精品 | 亚洲精品久久久 | 91久久北条麻妃一区二区三区 | 亚洲国产成人av好男人在线观看 | 开操网 | 香蕉二区 | 色姑娘综合网 | 国产成人综合亚洲欧美94在线 | 国产精品久久久久久久久免费桃花 | 成人h电影在线观看 | 男人天堂999 | 一区二区三区亚洲 | 91精品国产一区二区三区香蕉 | 日韩电影中文字幕 | 日韩在线一区二区三区 | 在线国产一区 | 中文字幕av亚洲精品一部二部 | 国产一二三视频在线观看 | 色嗨嗨 | 9色视频在线 | 久久久久久久久一区 | 欧美精品一二三 | 日日夜夜草 | 日韩中文一区二区 | 亚洲欧美一区在线 | 欧美极品视频在线观看 | 波多野结衣在线观看一区二区三区 |