sqlで文字数を調べる場合にはlen関数を使用しますが、単純に文字数を返すわけではなさそうです。
そこで今回はこのlen関数について、どういった場合にどのような結果となるのか具体的に解説してみたいと思います。
「len関数くらいなら理解できてる」と思っている方も是非一度この記事を読んでみてください。
もしかしたら今まで気づいていなかった部分があるかもしれません。
len関数とは
まず最初に、len関数についての基本的な部分を見てみましょう。
len関数とは、sqlで文字数を確認する際に使われる関数です。
sqlクエリを記述したことがあれば、一度は使ったことがある関数ですね。
言語によっては若干異なってくるものの、作用としてはどの言語でも同じような結果となります。
- Access:LEN
- SQL Server:LEN
- Oracle:LENGTH
- MySQL:CHAR_LENGTH、CHARACTER_LENGTH
- PostgreSQL:LENGTH、CHAR_LENGTH、CHARACTER_LENGTH
length関数の使い方
記述方法についても至ってシンプルで、次のように記述します。
LEN([string])
lengthの記述はたったこれだけです。
“string”には確認したい文字列を指定します。
それでは実際にサンプルコードで見てみましょう。
SELECT id, name FROM sample_table; id name ----------- ---------- 1 Arex 2 Jackson 3 Mia 4 Stella 5 Sofia SELECT id, name, LEN(name) AS name_length FROM sample_table; id name name_length ----------- ---------- ----------- 1 Arex 4 2 Jackson 7 3 Mia 3 4 Stella 6 5 Sofia 5
このサンプルコードでは、LEN関数でnameの文字数を確認しています。
LEN(name)を使うことで、下の段の「name_length」にnameの文字数が表示されていることが確認できます。
※一時項目にわかりやすく項目名を付けるため、ここではASを使用しています。
LEN関数が正確に作用しないケース
文字数を確認するためのLEN関数ですが、文字数を正確に取得できないケースがあります。
この現象はサロゲート文字を含む文字列を参照する場合に起こります。
例えば「SELECT LEN(N’𠮷’);」を実行すると通常は1と表示されるところが、2と表示されます。
テーブルを作成する際にも注意する必要がある
これも判断が難しいところですが、カラムを設定する際にデータ型をnvarcher(10)のように設定していた場合、極論を言ってしまうと、サロゲート文字なら5文字しか入らないことになります。
サロゲート文字を含むかどうかわからない場合にはカラム設定でnvarcher(MAX)としておいた方が良いでしょう。
まとめ
いかがでしたか?
今回は文字数を確認するための「len関数」について解説してみました。
sqlで直接文字列操作を行う場合には、サロゲート文字の存在を知っていないと思わぬ罠にはまってしまう可能性もありますので、注意しましょう。
サロゲート文字とは?
文字は通常は1文字=2Bytesですが、1文字=4Bytesとなっている文字を指します。
ペア文字とも呼ばれます。