2009-07-17 77 views
36

對於用戶日誌表我有一個SQL數據庫,我跟蹤報告請求的一些參數。該報告允許將多個ID傳遞給它,並將所有這些ID存儲在數據庫列中的單個列中。如果這是一個規範化的數據集,肯定會有一個額外的表設置爲此,但這是什麼被繼承...如何計算一個字符在SQL列中出現的次數?

我現在被要求快速計數的數量一次報告運行超過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 '%,%' 

回答

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

這是簡單地比較與逗號的列的長度,與該值的長度與逗號除去,給你的差(即,逗號數)

+0

我在回答中大膽你的問題,而不是也許你實際中林芽依聚焦解決你的實際目標。在這種情況下,mherren的答案可能更合適。 – AdaTheDev 2009-07-17 16:02:50

+3

在`REPLACE`周圍添加`LEN`,因爲`REPLACE`返回一個字符串,而不是int,這意味着您的數學運算不起作用。雖然! – Eric 2009-07-17 16:03:45

7

看來快速和骯髒的方式來回答你被要求將是這樣做的問題是:

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