Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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列中出现的次数?_Sql_Tsql_Char - Fatal编程技术网

如何计算字符在SQL列中出现的次数?

如何计算字符在SQL列中出现的次数?,sql,tsql,char,Sql,Tsql,Char,对于SQL数据库中的用户日志表,我跟踪报告请求中的一些参数。该报告允许向其传递多个ID,我将所有ID存储在数据库列的单个列中。如果这是一组规范化的数据,那么肯定会有一个额外的表设置,但这是继承的 现在,我被要求快速计算一个报告在传递超过2个ID的情况下运行的次数。我可以很容易地获得请求的报告超过1个的记录数,因为它们都包含逗号 接下来我需要做的是计算逗号在列中出现的次数。如何在SQL中实现这一点? --count the number of times more than 1 report wa

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

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

似乎回答您被问到的问题的快捷而肮脏的方法是:

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

这看起来太骇人听闻了,我怎么没想到呢!唯一的问题是,对于他们要求提供信息的每一个数字,我必须继续增加%,这确实解决了我现在被问到的问题。完全同意@AdaTheDev,但@AdaTheDev的想法更进一步,我现在可以指出数量分布等。非常感谢您的快速响应。非常感谢。还有,欢迎来到SO!我的重点是用粗体回答你的问题,而不是你实际需要什么来解决你的实际目标。在这种情况下,mherren的答案可能更合适。在
REPLACE
周围添加了
LEN
,因为
REPLACE
返回的是字符串,而不是int,这意味着你的数学不起作用+不过,创意解决方案只有1个!哎呀,我忘了把LEN()放进去了谢谢你,埃里克!这正是我需要的。非常感谢您的快速响应。如果使用此函数编写函数或计算任何给定字符,您可能希望使用DATALENGTH(…)而不是LEN(),因为选择LEN(“”)=0,而不是1。
select 
    count(*) as cnt
FROM 
    [table]
WHERE 
    RequestedReportParams Like '%,%,%'