计算字符串中的实例数

时间:2016-12-01 21:16:37

标签: sql sql-server tsql

我有一个列可以包含多个名称。

我需要一种方法:

  1. 第1列:计算字段中的名称总数
  2. 第2列:计算字段中以" mel"开头的名称数量。
  3. 数据示例:

    Row 1 || bob hope deloris steve mike ||
    Row 2 || melbob melbetty steve       ||
    

    预期的回答是:

           | Column 1 | Column 2 |
    Row 1  |     5    |     0    |
    Row 2  |     3    |     2    |
    

    希望这是有道理的。

2 个答案:

答案 0 :(得分:3)

  

我有一个列可以包含多个名称。

为什么呢?这违反了第一范式。

如果"名称"是任何非空格字符的集合,它们由一个空格分隔,没有可以使用的前导空格

Select ID,
       SIGN(L) + L -LEN(REPLACE(YourField,' ','')),
       (1 + L -LEN(REPLACE(' ' + YourField,' Mel','')))/4
 From @YourTable
CROSS APPLY (SELECT Len(YourField)) C(L)

(借用其他答案中的样本数据http://rextester.com/KPHAC50383

答案 1 :(得分:2)

借助Cross Apply和一些XML来分割字符串

ID  AnswerA AnswerB
1   5       0
2   3       2

返回

ID  RetSeq  RetVal
1   1       bob
1   2       hope
1   3       deloris
1   4       steve
1   5       mike
2   1       melbob
2   2       melbetty
2   3       steve
  

编辑 - 只是为了帮助您更好地将其可视化

选择*而不使用GROUP BY会产生以下内容。现在,通常我使用CROSS APPLY中的代码作为TVF(表值函数)。

$set