俺氏、本を読む

30歳になるまでに本を読んで勉強しようかと。主に啓発、お金についての本を読むつもり。一応プログラマーなのでその辺のことも。あと、せどり(転売)の仕入れ見込み商品をリサーチして仕入先と一緒に投稿します

【SQLServer】文字列の文字数、バイト数を取得

SQLServerの文字列型に格納されているデータの文字数、バイト数を取得する方法。

ちなみに俺氏はSQLServer2008でしか確認していない。

とりあえず2005以降であれば使えると思う。

 

LEN関数

文字数を返す。

LEN (Transact-SQL)

LEN関数について以下注意

・末尾の空白はカウントされない

サロゲート文字*1を含む文字列は正しい文字列長を取得出来ない

SQL Server の LEN 関数は文字列の長さを正確に取得出来ない・・・だけじゃない - ぐるぐる~

SQL Server 2012 で追加された照合順序で何ができるようになった? | SE の雑記

DATALENGTH関数

バイト数を返す。

DATALENGTH (Transact-SQL)

 

俺氏がこのエントリを書いたきっかけ

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時に結合することで正常に動いた。

 

 

SQL Server 2016の教科書 開発編

SQL Server 2016の教科書 開発編

 
SQL Server 2012の教科書 開発編

SQL Server 2012の教科書 開発編

 
SQL Server 2012 逆引き大全515の極意

SQL Server 2012 逆引き大全515の極意