【SQLServer】文字列の文字数、バイト数を取得
SQLServerの文字列型に格納されているデータの文字数、バイト数を取得する方法。
ちなみに俺氏はSQLServer2008でしか確認していない。
とりあえず2005以降であれば使えると思う。
LEN関数
文字数を返す。
LEN関数について以下注意
・末尾の空白はカウントされない
・サロゲート文字*1を含む文字列は正しい文字列長を取得出来ない
SQL Server の LEN 関数は文字列の長さを正確に取得出来ない・・・だけじゃない - ぐるぐる~
SQL Server 2012 で追加された照合順序で何ができるようになった? | SE の雑記
DATALENGTH関数
バイト数を返す。
俺氏がこのエントリを書いたきっかけ
SQLServerのストアド内でNVARCHR(MAX)の変数に動的SQLを格納して、
EXECUTEで実行しようとしたときに、
エラーが出るので「なんでや?」って思って、
実行前にPRINTで変数に格納されてる文字列見たら途中で切れてたw
それで実際に動的SQLが何文字(バイト)ぐらいになるか調査するために、
文字列の長さを取得しようとしたのがきっかけ。
ちなみにSQLServer2005以降?はnvarcharの最大サイズは2GB。
2005未満は8000バイトまでやったかな?
char および varchar (Transact-SQL)
でも、俺氏がエラーになってた動的SQLのバイト数は9000バイトぐらいやったのに、
なんで入りきらんかったんやろう?
2倍しても1.8GBやけん、(MAX)やったら入りそうなのに(-_-;)
4000文字以上 または 2GBを超えたらいかんのかな?
2GB以下なら何文字でも入るのかと思ってたけど、そうじゃないのかも。
でも(MAX)指定時は最大536,870,912文字だった気がするんやけどなぁ
別の型と勘違いしとるのかな?
んで考える時間も勿体ない(納期がすぐそこ!)ので、
動的SQLを二つの変数に分割して、EXECUTE時に結合することで正常に動いた。
*1:サロゲートペアで表される文字のこと 詳細:SQLServerにおけるサロゲート ペアのサポートについて - 大人になったら肺呼吸