如何在SQL Server中计算字符?

时间:2019-03-20 07:32:04

标签: sql sql-server

请帮助我-我在计算行和列中有多少个“ a”(字符)时遇到问题。

这是我的查询:

declare @zz as varchar(10) = '123a123a12'
select @zz

我可以使用SQL Server 2008 R2中的哪个函数来计算其中有多少个“ a”?

如何将charindexlen结合起来?

谢谢

3 个答案:

答案 0 :(得分:2)

这里的老派技巧是用空格('')替换'a',然后将结果字符串的长度与原始字符串的长度进行比较:

declare @zz as varchar(10) = '123a123a12' 

declare @zz_without_a varchar(10)=replace(@zz,'a','')

declare @a_in_zz int=len(@zz)-len(zz_without_a)

答案 1 :(得分:0)

一种可能的方法是使用REPLACE()LEN()函数。:

DECLARE @zz varchar(10) = '123a123a12' 
SELECT LEN(@zz) - LEN(REPLACE(@zz, 'a', '')) AS CharCount

输出:

CharCount
        2

如果要计数多个字符,另一种可能的方法是使用递归:

DECLARE @zz varchar(10) = 'aa3a123a12' 
;WITH cte AS (
   SELECT 1 AS N
   UNION ALL
   SELECT N + 1
   FROM cte
   WHERE N < LEN(@zz)
)
SELECT COUNT(*) AS CharCount
FROM cte
WHERE SUBSTRING(@zz, N, 1) IN ('a', '1')

答案 2 :(得分:0)

我将使用REPLACE DATALENGTH 而不是LEN,因为替换后可能会出现尾随空格。 示例:

DECLARE @zz as varchar(20) = '123a123a12      a' 
SELECT DATALENGTH(@zz) - DATALENGTH(REPLACE(@zz, 'a', '')),
    LEN(@zz) - LEN(REPLACE(@zz, 'a', ''))

输出为3和9。 如果@zz是NVARCHAR,而不是VARCHAR,则必须除以2。

从MSDN:

  

DATALENGTH函数返回用于表示任何字节的字节数   表达