【问题标题】:How to count characters in a string but exclude the character if it exists between quotes- T-SQL?如何计算字符串中的字符但如果它存在于引号之间则排除该字符-T-SQL?
【发布时间】:2020-09-03 23:43:32
【问题描述】:

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

AAABC,BBBBC,CCCCCCDBC,"DDD,DDDE",EEEFFS,"ggfg,dfgd"

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

所以对于以下字符串: AAABC,BBBBC,CCCCCCDBC,"DDD,DDDE",EEEFFS,"ggfg,dfgd"

输出: 5

【问题讨论】:

  • 老实说,使用不同的语言。 T-SQL 的强项是not 字符串检查/操作。使用支持 REGEX 模式匹配的东西,或者在你的实例上实现一个 CLR 函数。
  • 目前我绑定到 T-SQL。
  • 是时候找到并安装一些 REGEX CLR 函数了。 :) 任何 T-SQL 解决方案都不会简单,因为它需要递归。
  • 可能需要递归*
  • 让我们假设这不会发生。

标签: sql tsql


【解决方案1】:

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

请检查它是否适合您,

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

【讨论】:

  • @user14215024,欢迎您。你介意通过打勾来接受答案吗?谢谢。
  • @user14215024,我知道您是这里的新手,并且作为 SO 标准,如果答案解决了您的问题,您可以接受它,但如果不是,您不必接受它。
猜你喜欢
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多