Sql server SQL Server 2008 R2:计数字符匹配

Sql server SQL Server 2008 R2:计数字符匹配,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,以下是用于计算出现次数的给定模式 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您的

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

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''));