【问题标题】:Using SQL Server how to sort a list of strings based on searched value(Searched text) position in string使用 SQL Server 如何根据字符串中的搜索值(搜索文本)位置对字符串列表进行排序
【发布时间】:2021-08-06 16:23:16
【问题描述】:

我必须根据字符串中搜索到的文本位置对列表进行排序,即如果搜索到的值首先出现在字符串中,那么它的位置应该是列表中的第一个,如果它出现在字符串中的第二个那么它应该是第二个但是所有以第一个单词为搜索值的字符串都应该出现在列表的首位。

例如,输入字符串是:

  • 克里斯是个好人
  • 每个人都应该像克里斯
  • 不是每个人都是克里斯
  • 像克里斯这样的人很好

搜索到的值为“人”。

输出应该是:

  • 像克里斯这样的人很好
  • 每个人都应该像克里斯
  • 不是每个人都是克里斯
  • 克里斯是个好人

【问题讨论】:

  • 文本位置 - 如字符位置单词位置?尝试找到一些返回不同字符和单词位置顺序的示例数据。
  • 是的!基于字符串中搜索到的文本位置,我想对列表进行排序

标签: sql sql-server database sql-server-2008 isqlquery


【解决方案1】:

使用charindex():

order by charindex('person', column)

这假定该列具有字符串。

如果没有字符串,可以使用case表达式,或者转成NULL再转大值:

order by coalesce(nullif(charindex('person', column), 0), 999999)

【讨论】:

  • 谢谢,如果我需要从多个列中搜索字符串怎么办?目前我正在使用如下命令:na.Name LIKE '%' + @searchedValue + '%' 那么我应该如何将命令与 orderBy 应用于上述 cloumns
  • @user15950409 。 . .这回答了您在此处提出的问题。如果您有其他问题,请提出问题。
【解决方案2】:

您可以获取NGrams8k 的副本并通过多种方式分析字符串。这将按位置排序并返回。

结果:

Txt                                  Position
------------------------------------ ----------
person like chris are good           1
Every person should be like chris    7
Not every person is chris            11
Chris is a good person               17

如果您将搜索文本更改为“Chris”,您会得到:

Txt                                 Position
----------------------------------- --------------------
Chris is a good person              1
person like chris are good          13
Not every person is chris           21
Every person should be like chris   29

您可以使用 NGrams8K 做的其他事情是按搜索字符串的出现次数排序。

--==== Searching by number of occurances
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
------------------------------------ -----------
Person person and more persons       3
Chris said "person", what a person   2
Every person should be like chris    1
Not every person is chris            1
person like chris are good           1
Chris is a good person               1

干杯。

【讨论】:

  • 太棒了!但我的要求是在列表中的第一个位置我想在第一个位置显示包含搜索值的字符串
  • 你在开玩笑吧?您需要有人向您展示如何向查询中添加列吗?你怎么试的?你到底是怎么坚持的?
猜你喜欢
  • 2020-09-20
  • 2014-01-09
  • 2013-12-13
  • 2020-02-10
  • 2012-11-04
  • 2019-08-28
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多