SQL Server 2008 R2:计数字符匹配

SQL Server 2008 R2: Count character match

以下是计算出现次数的给定模式。

DECLARE @Pattern VARCHAR(20) = ' ??? ? ?? '

想要统计?的出现次数。

预期计数:6

我的尝试: 1

SET @Pattern = LEN(@Pattern) - LEN(REPLACE(@Pattern,'?',''));

PRINT(@Pattern)

结果:9

我的尝试: 2

SET @Pattern = LEN(LTRIM(RTRIM(@SDPattern)));

PRINT(@Pattern)

结果:8

您的第一个问题几乎是正确的。 LEN 不计算尾随空格。所以在这种情况下你应该使用 datalength

DECLARE @Pattern VARCHAR(20) = ' ??? ? ?? '
SET @Pattern = DATALENGTH(@Pattern) - DATALENGTH(REPLACE(@Pattern,'?',''));

len() 函数忽略尾随空格。为了测量字符串的实际长度,需要使用datalength()函数。

但是,请注意它计算的是字节而不是字符。因此,例如,这会给您双倍的期望:

declare @v nvarchar(20) = N'we?i?gf 349?08 d ? ';

select datalength(@v) - datalength(replace(@v, N'?', N''));