【发布时间】:2017-01-31 07:48:48
【问题描述】:
我在这里搜索了许多问题,但我找到的所有问题都是针对不同的语言,如 Javascript 等。
我在 SQL 中有一个简单的任务,但我似乎找不到简单的方法来完成。 我只需要计算 SQL 字符串(一个句子)中“单词”的数量。您可以在我的示例中看到为什么“单词”在引号中。 “单词”由空格分隔。
例句:
1. I am not your father.
2. Where are your brother,sister,mother?
3. Where are your brother, sister and mother?
4. Who are you?
想要的答案:
1. 5
2. 4
3. 7
4. 3
如您所见,我需要计算“单词”而不考虑符号(我必须将它们视为单词的一部分)。所以在样品编号中。 2:
(1)Where (2)are (3)your (4)brother,sister,mother? = 4
我可以通过这样的替换来处理多个空格:REPLACE(string, ' ', ' ') -> 2 whitespaces to 1
REPLACE(string, ' ', ' ') -> 3 whitespaces to 1 and so on..
我可以使用什么 SQL 函数来执行此操作?我使用的是 SQL Server 2012,但需要一个也适用于 SQL Server 2008 的函数。
【问题讨论】:
-
如果你问我,这是一个棘手的问题。例如,假设您将数字
3,000作为单词之一出现。那么,在这种情况下,用逗号分割是不正确的。你应该清楚地告诉我们这里的规则是什么。 -
@TimBiegeleisen 逗号或任何其他特殊字符将被视为“单词”的一部分。在我的问题中说明了这一点。它将满足的唯一有效分隔符是单个空格。
-
必须在 SQL 中完成吗? :|
-
@super-user 您可以使用 SQLCLR 编写适当的函数或使用 Regexp 快速计算单词 WITHOUT 生成临时字符串。每个
REPLACE都会生成字符串,也可能导致错误的执行计划。 -
对于 SQL Server 2008 - 它不再受支持。 2012是最早的版本。 2016 提供
STRING_SPLIT功能
标签: sql-server string