【问题标题】:How to count the number of times a character appears in a SQL column?如何计算一个字符在 SQL 列中出现的次数?
【发布时间】:2010-11-11 18:21:25
【问题描述】:

对于我在 SQL 数据库中的用户日志记录表,我跟踪报告请求中的一些参数。该报告允许将多个 ID 传递给它,并且我将所有这些 ID 存储在数据库列的单个列中。如果这是一个规范化的数据集,肯定会有一个额外的表设置,但这是继承的......

现在有人要求我快速计算一个报告运行的次数,其中传递了超过 2 个 ID。我可以轻松获得请求超过 1 个报告的记录数,因为它们都包含逗号。

接下来我需要做的是计算逗号在列中出现的次数。你如何在 SQL 中做到这一点?

--count the number of times more than 1 report was requested in the record
select 
    count(*) as cnt
from
    [table]
where
    RequestedReportParams Like '%,%'

【问题讨论】:

    标签: sql tsql char


    【解决方案1】:
    SELECT LEN(RequestedReportParams) - LEN(REPLACE(RequestedReportParams, ',', ''))
    FROM YourTable
    WHERE .....
    

    这只是将列的长度与逗号进行比较,将值的长度与逗号删除后进行比较,以得出差异(即逗号的数量)

    【讨论】:

    • 我专注于以粗体字回答您的问题,而不是您实际可能需要什么来解决您的实际目标。在这种情况下,mherren 的答案可能更合适。
    • REPLACE 周围添加了LEN,因为REPLACE 返回的是一个字符串,而不是一个int,这意味着你的数学运算不起作用。不过,对于创造性的解决方案 +1!
    • 哎呀@我忘了把 LEN() 放进去! - 谢谢埃里克!
    • 这正是我所需要的。非常感谢您的快速回复。
    • 如果使用它来编写函数或计算任何给定的字符,您可能会想要使用 DATALENGTH(...) 而不是 LEN(),因为选择 len(' ') = 0,而不是1.
    【解决方案2】:

    似乎回答您被问到的问题的快速而肮脏的方法是这样做:

    select 
        count(*) as cnt
    FROM 
        [table]
    WHERE 
        RequestedReportParams Like '%,%,%'
    

    【讨论】:

    • 这太骇人听闻了,我怎么没想到呢!唯一的问题是,我必须继续为他们要求信息的每个数字添加额外的百分比......
    • 这确实解决了我现在被问到的目标。完全同意@AdaTheDev,但@AdaTheDev 的想法更进一步,我现在可以指出数量的分布等。非常感谢您的快速回复。非常感激。另外,欢迎来到 SO!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多