SQLServerのLEN関数は文字列の後ろの空白は無視する

記事内に広告が含まれています。

SQLServerのT-SQLにあるLEN関数は文字列の後ろの空白は無視して長さを返します。

ちょっとした知識不足で不具合を生んでしまうところだったのでメモとして書き留めておきます。

SQLServerのLEN関数は文字列の後ろの空白は無視する

SQLserveには文字数をカウントしてくれる関数LENが用意されているのですが、この関数、文字列の末尾の空白を除いた文字数を返します。

例えば

SELECT LEN( 'ABC' )

の戻り値は「3」ですし、

SELECT LEN( ' ' + 'ABC' )   --前に空白2文字

の戻り値は「5」です。

でも

SELECT LEN( 'ABC' + ' ' )   --後ろに空白2文字

の戻り値は「3」です。

なぜこのような仕様になっているのか不明ですが、最後の空白は意味のなさないものという扱いか、CHAR型でとった文字列には宣言された大きさに満たない文字列の最後には空白がセットされるということで、それでも正しく文字数を返すためにそうなったのでしょう。

まとめ

知っていれば大きな問題にはなりませんが、知らないとちょっとしたわかりにくい不具合を埋め込んでしまいます。

以上、SQLServerのLEN関数は文字列の後ろの空白は無視するでした。

タイトルとURLをコピーしました