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