2012-03-20 10 views
2
 message 
------------ 
01d,2s3,1wee  (nvarchar) 
01,32,32154, (nvarchar)     
     df,g,d, (nvarchar) 
    dd,12,2  (nvarchar) 

私は以下の結果を達成する方法と、セルの最後の '、'を考慮する方法を知らない。リスト内のデータは毎日変更できます。その後、テキストの量を計算する

要求された結果

 message Count 
------------ ----- 
01d,2s3,1wee  3 
01,32,32154,  3 
     df,g,d,  3 
     dd,12,2  3 

// DWD

+0

希望する出力は何ですか? – Teja

+0

'、'は最後かどうかですか? –

答えて

2
declare @table table(message varchar(20)) 
insert into @table values('01d,2s3,1wee'); 
insert into @table values('01,32,32154,');    
insert into @table values('df,g,d,');   
insert into @table values('dd,12,2'); 

SELECT message 
,CASE WHEN SUBSTRING(REVERSE(message),1,1) = ',' THEN 
    LEN(message) - LEN(REPLACE(message, ',', '')) ELSE 
(LEN(message) - LEN(REPLACE(message, ',', '')) +1)END As Count 
FROM @table 
+1

+1 Slick ...私はちょうどカウントを調整しなかったのか分からない。 –

0

このアプローチをチェック最後の文字が,あり、そしてそれがある場合は、それを削除した場合...

それは元のメッセージの長さとすべての,が削除されたメッセージの長さを比較して、元々存在した,の数を判断します。

select 
    len(message) - len(replace(message, ',', '')) as wordCount 
from 
(
    select 
     case 
      when right(rtrim(message),1) = ',' 
      then substring(rtrim(message),1,len(rtrim(message))-1) 
      else message 
     end as message 
) trimmed 
0

私は、これはあなたが探しているものだと思う:

SELECT message 
    ,[Count] = LEN(CASE WHEN RIGHT(message, 1) = ',' THEN message ELSE message + ',' END) - LEN(REPLACE(CASE WHEN RIGHT(message, 1) = ',' THEN message ELSE message + ',' END, ',' ,'')) 
    FROM yourtablename 
0

まず、あなたは「」トレイルを取り除く、その後、元の文字列の長さをカウントし、減算する必要があります文字列の長さを "、"で置き換えます。このような何かを:

SELECT message, LEN(Newmessage) - LEN(REPLACE(Newmessage,',','')) + 1 [Count] 
FROM (SELECT message, CASE WHEN RIGHT(message,1) = ',' THEN LEFT(message,LEN('01,32,32154,')-1) ELSE 
     message END AS Newmessage 
     FROM YourTable) A 

これは、そうでない場合は、あなたがにRTRIM

0
SELECT message 
, 1 + LEN(message) - REPLACE (message , ',' , '') AS count 
FROM my_table 

ダニが昏睡の数をカウントして構成されています(「」)を使用してください、あなたの列の末尾にスペースがないことを前提としてい列。 これは、文字列と昏睡のない同じ文字列との差を計算します。

関連する問題