非常に奇妙な問題に直面しました(このような成熟した製品には本当に奇妙です): Transact-SQL文を使用してUnicode文字列の文字数を取得する方法。 len()
TSQL関数が末尾の空白を除いて、文字数を返すというこの問題の重要な問題です。もう1つの方法は、datalength(バイト数を返す)を使用して2で割ることで、Unicode文字の数を取得します。しかし、Unicode文字は代理ペアになる可能性があるので、どちらも機能しません。文字列内の文字数を取得する方法
私たちは2種類のソリューションを持っています:最初にlen(replace())
を使用し、2番目に単一シンボルを追加してから結果から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
他のアイデア?
うわー、私はそれが後続の空白を削除は思いもしませんでした!私は個人的にはaddAndMinusBehaviourを使うでしょう。 –
個人的に私はあなたの 'addAndMinusBehaviour'について醜いことは何も見ません - 実際には、それはむしろ賢いと思います。 – AakashM
私はこれをオプションのlen(reverse(@txt))として見いだしました。これは末尾のスペースでは動作しますが、先頭のスペースでは壊れてしまうことは明らかです。 –