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 :(得分: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
勾选包括计算列中的逗号数(“,”)。 为此,它计算字符串与没有昏迷的相同字符串之间的差异。