Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算SQL Server中的字符数?_Sql_Sql Server - Fatal编程技术网

如何计算SQL Server中的字符数?

如何计算SQL Server中的字符数?,sql,sql-server,Sql,Sql Server,请帮助我-我在计算一行和一列中有多少个“a”字符时有问题 这是我的疑问: declare @zz as varchar(10) = '123a123a12' select @zz 我可以使用SQL Server 2008 R2中的哪个函数来计算其中有多少个“a” 我怎样才能将charindex与len结合起来 谢谢一种可能的方法是使用和功能: DECLARE @zz varchar(10) = '123a123a12' SELECT LEN(@zz) - LEN(REPLACE(@zz, '

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

这是我的疑问:

declare @zz as varchar(10) = '123a123a12'
select @zz
我可以使用SQL Server 2008 R2中的哪个函数来计算其中有多少个“a”

我怎样才能将charindex与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')

一种可能的方法是使用和函数:

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

这里的老派技巧是用空格替换“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)

这里的老派技巧是用空格替换“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)
我将使用REPLACE和DATALENGTH而不是LEN,因为REPLACE之后可能会出现尾随空格。 例如:

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

从MSDN:

DATALENGTH函数返回用于表示任何 表情

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

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

从MSDN:

DATALENGTH函数返回用于表示任何 表情


请参阅最新答案。这有助于你从刺痛中找出字符。请参考更新的答案。它可以帮助你从刺痛中找出char。