当前位置: 首页 > 面试题库 >

查询以返回特定值在字符串中出现的次数?

谢璞
2023-03-14
问题内容

好,所以我有两个桌子。表1具有参考数字列(A),第二列具有随机字符串(B)。表2只有一列,其中列出了可能在表1的字符串中也可能不在字符串中的值。

dbo.Tbl_1

+--+---------------------------------------+
|A |B                                      |
+--+---------------------------------------+
|24|BLUE; KITTEN; WHITE; PINK; SLOPE; GREEN|
+--+---------------------------------------+
|51|GREEN; CLOUDY; WHITE; CHIPS            |
+--+---------------------------------------+
|78|PATRIOTS; PINK; PINK; WHITE            |
+--+---------------------------------------+
|22|WHITE; RED; TREES; AMY; GREEN          |
+--+---------------------------------------+

dbo.Tbl_2

+-----+
|C    |
+-----+
|BLUE |
+-----+
|WHITE|
+-----+
|PINK |
+-----+
|BROWN|
+-----+

哪种SQL查询将确定在Table1的字符串中找到Table2的值的次数是多少?基本上我想返回以下结果集:

+-----+----+
|BLUE |1   |
+-----+----+
|WHITE|4   |
+-----+----+
|PINK |3   |
+-----+----+
|BROWN|NULL|
+-----+----+

仅供参考:实际上,表2具有大约200条唯一记录。表1记录了约160万条记录,并带有唯一的参考号。这两个表都不是静态的。


问题答案:

我玩了一下,想出了这个SQL提琴

相关的SELECT查询看起来像这样(尽管需要两次表扫描,但我确信它可以变得更有效率):

select C, sum(dbo.CountOccurancesOfString(B, C)) as number
from Tbl_1 join Tbl_2 on 1=1
group by C
order by number desc

编辑 这是我从这个答案得到的功能:

CREATE FUNCTION dbo.CountOccurancesOfString
(
 @searchString nvarchar(max),
 @searchTerm nvarchar(max)
)
RETURNS INT
AS
BEGIN
 return (LEN(@searchString)-LEN(REPLACE(@searchString,@searchTerm,'')))/LEN(@searchTerm)
END


 类似资料:
  • 问题内容: 我想在elasticsearch中编写一个查询,这样它只会给出字符串从特定单词开始的结果,例如,如果我要搜索“ Donald”,则我现在有一个字符串“ Donald Duck”,而另一个字符串是“ Alan Donald” “与以下查询 那么结果应该是“ Donald Duck”而不是“ Alan Donald”,因为在“ Donald Duck”中,它以“ Donald”开头。现在有

  • 问题内容: 在PHP中,最简单的方法是在首次出现特定字符之前返回字符串的一部分? 例如,如果我有一个字符串… “快速的棕色狐狸跳过了等等,等等。” …并且我正在过滤空格字符(“”),该函数将返回“ The” 谢谢! 问题答案: 您 可以 这样做: 但我喜欢这样 更好 :

  • 问题内容: 给我们一个字符串,说一个子字符串,说。我需要找到字符串在原始字符串中第二次出现时的索引。 在这种情况下将返回2。在这种情况下,我希望输出为10。 问题答案: 使用的重载版本,它将起始索引(fromIndex)作为第二个参数:

  • 我们得到一个字符串,比如说< code >“it whatis”,以及一个子字符串,比如说< code >“is”。当字符串< code >“is”在原始字符串中第二次出现时,我需要找到< code >“I”的索引。 在这种情况下将返回2。我希望在这种情况下输出为10。

  • 我使用了COUNT函数来确定一个表中有多少行,或者一个值在一个表中出现的频率。 但是,我希望以单独列的形式返回表中多个值的计数。 假设我们有一个包含列的customer表;客户ID、姓名、电话号码 假设我们还有一个包含以下列的销售表:客户ID、购买的商品、日期 我希望我的查询返回一列客户ID和一列客户ID在sales表中出现的次数。我想一次对我所有的客户ID执行此操作--有什么提示吗?

  • 问题内容: 我的主字符串是“ hello Swift Swift和Swift”,子字符串是Swift。我需要获取子字符串“ Swift”在提到的字符串中出现的次数。 此代码可以确定模式是否存在。 现在我需要知道发生的次数。 问题答案: 一种简单的方法是分割,然后从零件数中减去1: 此代码打印3。 编辑: 在Swift 3语法之前,代码如下所示: