SQL Server 2008 R2:计数字符匹配

问题描述 投票:1回答:2

以下是计算事件的给定模式。

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

sql-server sql-server-2008-r2
2个回答
2
投票

你的第一个查询几乎是对的。 LEN不计算尾随空格。所以在这种情况下你应该使用datalength

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

1
投票

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

但是,请注意它计算字节而不是字符。因此,例如,这将为您提供两倍的预期:

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

select datalength(@v) - datalength(replace(@v, N'?', N''));
© www.soinside.com 2019 - 2024. All rights reserved.