2009-07-17 7 views
36

、私はレポート要求のオフパラメータのいくつかを追跡します。このレポートでは、複数のIDを渡すことができ、すべてのIDをデータベース列の単一の列に格納します。これが正規化されたデータセットである場合、これには追加のテーブル設定がありますが、これは継承されたものです...SQLカラムに文字が現れる回数を数えるには?私は、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

あなたの実際の目標を解決するeed。この場合、mherrenの答えがより適切かもしれません。 – AdaTheDev

+3

'REPLACE'は' LPL'を 'REPLACE'の周りに追加しました.' REPLACE'はintではなく文字列を返します。これはあなたの数学がうまくいかないことを意味します。しかし、クリエイティブな解決のために+1! – Eric

+0

私はLEN()を入れるのを忘れています! - ありがとうエリック! – AdaTheDev

7
(カンマのすなわち数)あなたに違いを与えるために、取り外しカンマで値の長さで、カンマで列の長さを比較しています

それはあなたがこれを行うことであろう尋ねてきた質問に答えるために迅速かつ汚いやり方だ:私はおそらく、あなたが実際にn個かもしれないのではなく、太字であなたの質問に答えることに焦点を当ててきました

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

そうhackerishようだ、なぜ私はそれを考えていませんでした!唯一の問題は、実際には目標ではなく、boldened質問を解決するための – RSolberg

+2

+1 ...私は、彼らが情報を要求し、各数のため、追加の%を追加し続ける必要がありますということです! – AdaTheDev

+1

これは私が今質問されたことの目標を解決しました。 @AdaTheDevと完全に同意しますが、@ AdaTheDevのアイデアはそれをさらに進歩させました。ここで、数量の分布などを指摘することができます。とても有難い。また、SOにようこそ! – RSolberg

関連する問題