如何计算字符串中的字符数,但如果该字符存在于引号之间,则排除该字符-T-SQL?

如何计算字符串中的字符数,但如果该字符存在于引号之间,则排除该字符-T-SQL?,sql,tsql,Sql,Tsql,如果我有一个包含逗号的字符串,如下所示: AAABC,BBBBC,CCCC DBC,“DDD,DDDE”,EEEFFS,“ggfg,dfgd” 是否有办法计算所有逗号,但不计算“”之间的逗号(引号) 因此,对于以下字符串: AAABC,BBBBC,CCCC DBC,“DDD,DDDE”,EEEFFS,“ggfg,dfgd” 输出: 5老实说,我不是一个T-SQL的家伙,而是一个Oracle,但是,基于我的兴趣和来自互联网的参考资料(特别是),我可以想出一个符合要求的解决方案 但请检查它是否适合你

如果我有一个包含逗号的字符串,如下所示:

AAABC,BBBBC,CCCC DBC,“DDD,DDDE”,EEEFFS,“ggfg,dfgd”

是否有办法计算所有逗号,但不计算“”之间的逗号(引号)

因此,对于以下字符串: AAABC,BBBBC,CCCC DBC,“DDD,DDDE”,EEEFFS,“ggfg,dfgd”

输出:
5

老实说,我不是一个
T-SQL
的家伙,而是一个
Oracle
,但是,基于我的兴趣和来自互联网的参考资料(特别是),我可以想出一个符合要求的解决方案

但请检查它是否适合你

declare @input varchar(1000)
set @input= 'AAABC,BBBBC,CCCCCCDBC,"DDD,DDDE",EEEFFS,"ggfg,dfgd"'

declare @start int, @len int

declare @loopvar int
set @loopvar = patindex('%"%"%', @input)
-- loop to replace all ',' with '' to exclude from count
while @loopvar > 0
begin
 set @start = patindex('%"%"%', @input)+1
 set @len= charindex('"', substring(@input, @start, len(@input)))-1
 set @input= substring(@input, 1, @start - 2) +
             replace((substring(@input, @start, @len)), ',', '') +
             substring(@input, @start + @len + 1, len(@input))
 
 set @loopvar = patindex('%"%"%', @input)
end;
select len(@input) - len(replace(@input,',','')) as count_comma

老实说,使用不同的语言。T-SQL的要塞不是字符串检查/操作。使用支持正则表达式模式匹配的工具,或者在您的实例上实现一个支持正则表达式模式匹配的CLR函数。目前,我绑定到T-SQL。是时候查找并安装一些正则表达式CLR函数了。:)任何T-SQL解决方案都不会简单,因为它将需要递归。可能需要递归*让我们假设不会发生这种情况。@user14215024,欢迎使用。你介意打勾接受答案吗?谢谢。@user14215024,我知道您是新来的,按照标准,如果答案解决了您的问题,您可以接受,但如果答案不解决,您就没有义务接受它。