Sql Server 计算某个字符 在字符串中有多少

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sql Server 计算某个字符 在字符串中有多少相关的知识,希望对你有一定的参考价值。

引言:比如有一个字符串“oiddiaj/j9jkl/88ol”,想要计算字符串中/的个数,用到len这个方法

[sql] view plain copy
len('oiddiaj/j9jkl/88ol')-len(replace('oiddiaj/j9jkl/88ol','/',''))

想判断某个字符包含在某个字段内可以用charindex函数
参考技术A sql server 某字符个数

如何在 SQL Server 中计算一个字符? [复制]

【中文标题】如何在 SQL Server 中计算一个字符? [复制]【英文标题】:How to count a character in SQL Server? [duplicate] 【发布时间】:2019-08-10 20:10:30 【问题描述】:

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

这是我的查询:

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

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

如何将charindexlen 结合使用?

谢谢

【问题讨论】:

请参考更新后的答案。它可以帮助您从刺痛中找出炭。 【参考方案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)

【讨论】:

【参考方案2】:

我会使用REPLACEDATALENGTH 而不是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 函数返回用于表示任意 表达

【讨论】:

【参考方案3】:

一种可能的方法是使用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')

【讨论】:

以上是关于Sql Server 计算某个字符 在字符串中有多少的主要内容,如果未能解决你的问题,请参考以下文章

sql server截取某个特定字符前的字符串

sql server 去掉 某个字符串 前面的某个字符

sql 删除指定字符串

SQL Server:在某个字符之前提取所有内容

SQL Server判断某个字段是否包含中文/英文字符/数字

SQL SERVER 字符串截取