计算文字数量

时间:2012-03-20 21:17:43

标签: sql sql-server

     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

5 个答案:

答案 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 :(得分:0)

此方法检查最终字符是否为,,如果是,则将其删除...

然后,

将原始邮件的长度与删除了所有,的邮件的长度进行比较,以确定最初存在的,个。{/ p>

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

答案 2 :(得分: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

答案 3 :(得分: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

答案 4 :(得分:0)

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

勾选包括计算列中的逗号数(“,”)。 为此,它计算字符串与没有昏迷的相同字符串之间的差异。