SQL计数字符串匹配每行

时间:2017-08-23 12:01:08

标签: sql sql-server count

请看一下这个简单的SQL服务器数据库: database

我想要的是,我想创建一个只有3列的摘要,这是代码:

select ProductID, Name,
       *code* as CountString
from product
where Name in ('this', 'is', 'count', 'example')

我希望结果有3列,而“CountString”列是匹配的字符串总数('this','is','count','example')。这是我想要的结果:

Result

因此,例如,我希望ProductID 1的Countstring为4,因为它包含所有4个单词。

如果你能解决这个问题,那就太棒了!

2 个答案:

答案 0 :(得分:3)

如果我理解正确:

select ProductID, Name,
       ( (case when Name like '%this%' then 1 else 0 end) +
         (case when Name like '%is%' then 1 else 0 end) +
         (case when Name like '%count%' then 1 else 0 end) +
         (case when Name like '%example%' then 1 else 0 end)
       ) as CountString
from product;

注意:任何有“this”的Name也有“是”。

如果“单词”由空格(仅空格)分隔,则可以执行以下操作:

select ProductID, Name,
       ( (case when concat(' ', Name, ' ') like '% this %' then 1 else 0 end) +
         (case when concat(' ', Name, ' ') like '% is %' then 1 else 0 end) +
         (case when concat(' ', Name, ' ') like '% count %' then 1 else 0 end) +
         (case when concat(' ', Name, ' ') like '% example %' then 1 else 0 end)
       ) as CountString
from product;

答案 1 :(得分:0)

以下查询应该满足您的需求---

SELECT PRODUCTID,
       NAME,
       REGEXP_COUNT(NAME, 'this|is|count|example', 1, 'c') CountString
  FROM product;

此查询将导致"区分大小写"检查,仅表示"示例"将不计算"示例"。如果你想要" Case Insensitive"检查刚刚放入' i'而不是' c'。