如何在Transact SQL中获取字符串中的字符数,"其他方式"

Ale*_*bak 10 t-sql sql-server string

我们遇到了一个非常奇怪的问题(这种成熟产品真的很奇怪):如何使用Transact-SQL语句获取Unicode字符串中的字符数.这个问题的关键问题是len()TSQL函数返回字符数,不包括尾随空格.另一种变体是使用datalength(返回字节数)并除以2,因此获取Unicode字符的数量.但Unicode字符可以是代理对,所以它也不起作用.

我们有两种解决方案:第一种是使用len(replace()),第二种是添加单个符号,然后从结果中减去1.但IMO这两种变体都相当难看.

declare @txt nvarchar(10)
set @txt = 'stack ' 
select @txt as variable, 
 len(@txt) as lenBehaviour, 
 DATALENGTH(@txt)/2 as datalengthBehaviour, 
 len(replace(@txt,' ','O')) as ReplaceBehaviour, 
 len(@txt+'.')-1 as addAndMinusBehaviour
Run Code Online (Sandbox Code Playgroud)

任何其他想法如何计算字符串中的字符与尾随空格?

Rob*_*sey 6

我不能发表评论所以我将不得不留下答案(或关闭).

我的投票将是addAndMinusBehaviour

我没有一个好的第三种选择,在选项/ SET/Collat​​ion任务中可能有一些模糊的空格规则,但是我不知道更多细节.

但是真正的addAndMinusBehaviour可能是最容易实现的,执行速度最快,如果你记录它,也可以很好地维护.

  • 投票给一些点,以便您将来可以发表评论。(我也讨厌不能发表评论。) (2认同)