45

对于我在 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 '%,%'
4

2 回答 2

116
SELECT LEN(RequestedReportParams) - LEN(REPLACE(RequestedReportParams, ',', ''))
FROM YourTable
WHERE .....

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

于 2009-07-17T15:58:16.017 回答
8

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

select 
    count(*) as cnt
FROM 
    [table]
WHERE 
    RequestedReportParams Like '%,%,%'
于 2009-07-17T16:00:06.387 回答