是否可以使用纯SQL
来计算以下字符串中x
的数量?
708258761XXXXXXXX00A
708232761XXXXXXXXXXA
与前面的字符串
运行时的结果8
10
我可以轻松地在代码中执行此操作,但我正在寻找一种纯T-SQL
方法来执行此操作。
根据我正在查看的产品,该模式将具有不同数量的X
。
换句话说,我正在寻找的是一种纯SQL
方式来计算模式的匹配数。
在上面的示例中,输入模式为X
。使用另一个示例,搜索模式为Ted
,以下内容可能会返回3
的值:
特德是泰德,因为泰德太棒了!
答案 0 :(得分:2)
我添加了一个名为@pattern
的变量来存储搜索模式字符串。
通过删除模式的每个实例,确定删除的字符数,然后将删除的字符数除以搜索模式的长度来计算匹配数。
DECLARE @pattern varchar(20) = 'Ted'
SELECT (Len(ColumnToSearch) - Len(Replace(ColumnToSearch, @pattern, ''))) / Len(@pattern)
AS Number_Of_Matches
FROM MyTable
如果您需要经常进行此计算,可以基于此轻松创建一个函数。
答案 1 :(得分:2)
Adam Porad给出了很好的答案,但没有忘记LEN不计算尾随空格:
DECLARE @pattern varchar(20) = 'Ted ';
SELECT LEN(@pattern) -- return 3
改为使用DATALENGTH:
DECLARE @pattern varchar(20) = 'Ted ';
DECLARE @ColumnToSearch VARCHAR(1000) = 'Ted is Ted because Ted is awesome!';
SELECT (DATALength(@ColumnToSearch) - DATALength(Replace(@ColumnToSearch, @pattern, ''))) / DATALength(@pattern),
(Len(@ColumnToSearch) - Len(Replace(@ColumnToSearch, @pattern, ''))) / Len(@pattern),
(Len(@ColumnToSearch) - Len(Replace(@ColumnToSearch, @pattern, ''))),
Len(@ColumnToSearch),
Len(@pattern)
AS Number_Of_Matches