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

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

这是我的查询:

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

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

如何将charindexlen 结合使用?

谢谢

【问题讨论】:

  • 请参考更新后的答案。它可以帮助您从刺痛中找出炭。

标签: sql sql-server


【解决方案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')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-26
        • 1970-01-01
        • 1970-01-01
        • 2013-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-12
        相关资源
        最近更新 更多