我必須根據搜索文本在字串中的位置對一個串列進行排序,即如果搜索值在字串中出現在第一位,那么它在串列中的位置應該是第一位,如果它在字串中出現在第二位,那么它應該是第二位,但所有以第一個詞作為搜索值的字串應該出現在串列的第一位。
例如,輸入字串是:
- Chris是個好人
- 每個人都應該像Chris一樣 。
- 不是每個人都是chris 像chris這樣的人是好的。
搜索到的值是 "人"。
輸出應該是:
- 像chris這樣的人是好的 。
- 每個人都應該像chris一樣 。
- 不是每個人都是chris 。
- Chris是個好人
uj5u.com熱心網友回復:
使用charindex():
order by charindex('person', column)
這假定該列具有該字串。
如果它沒有這個字串,你可以使用一個case運算式,或者轉換為NULL,然后轉換為一個大值:
order by coalesce(nullif(charindex('person', column), 0), 999999)
uj5u.com熱心網友回復:
你可以抓取一份NGrams8k并以多種方式分析字串。這將根據位置進行排序以及回傳。
結果:Txt Position
------------------------------------ ----------
人像克里斯是好1。
每個人都應該像克里斯7。
不是 每個人都是克里斯11。
克里斯是一個好人17。
如果你將搜索文本改為 "克里斯",你會得到:
Txt Position
----------------------------------- --------------------
克里斯是個好人1。
人像克里斯是好人13。
不是 每個人都是克里斯21。
每個人都應該像克里斯29。
你還可以用NGrams8K做一些事情,就是按照你的搜索字串的出現次數進行排序。
--==== 按出現次數搜索。
INSERT @t VALUES('Chris said "person", what a person'), ('person person and more persons');
SET @search = 'person';
SELECT t.Txt, Occurances = COUNT(*)
FROM @t AS t
CROSS APPLY samd.ngrams8k(t.txt,LEN(@search) AS ng
WHERE ng.Token = @search >。
GROUP BY t.Txt
ORDER BY -COUNT(*)。
回傳:
Txt Occurances
------------------------------------ -----------
人和多人3。
克里斯說,"人",什么人2。
Every person should be like chris 1
不是 每一個人都是克里斯1。
人像克里斯是好1。
克里斯 是一個好人 1
歡呼吧。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/314810.html
標籤:
下一篇:輸入選定的行并忽略重復的行
