SQL道場 文字列関数 LEN/LENGTH関数
SQLで文字列の長さを得るLEN/LENGTH関数について記載しています。
対応データベース:SQL Server MySQL Oracle PostgreSQL DB2 SQLite Access
LEN/LENGTH関数の文法
SELECT LEN(文字列) FROM テーブル
SELECT LENGTH(文字列) FROM テーブル
引数 | 文字列 | 文字列型 |
返値 | 数値型 文字列長が数値で戻ります。 |
LEN/LENGTH関数は指定された文字列の長さを求めます。MySQL、DB2では文字をバイト単位で数えます。(複数バイトとしてカウントされます。)Oracleでは漢字も1文字で数えます。PostgreSQLでは可変長の文字列の場は漢字も1文字で数えます。固定長の文字列の場合は定義された文字列長が戻ります。
SQL Server(マイクロソフト公式)
引数 | 文字列 | 評価される文字列式です。 「引数の文字列」 には、文字データまたはバイナリ データの定数、変数、または列を使用できます。 |
返値 | 式が varchar(max) 、nvarchar(max) 、または varbinary(max) データ型の場合は bigint。それ以外の場合は int。 SC の照合順序を使用する場合、返される整数値では、UTF-16 サロゲート ペアが 1 文字としてカウントされます。 |
LEN では末尾の空白が除外されます。 これが問題の場合は、文字列が切り捨てられない DATALENGTH (Transact-SQL) 関数の使用を検討してください。 Unicode 文字列を処理する場合、DATALENGTH では文字の数と等しくない値が返される場合があります。
MySQLの実行例
マルチバイト文字は、複数のバイトとしてカウントされます。 つまり、5 つの 2 バイト文字を含む文字列では、LENGTH() は 10 を返します。
/* MySQL 文字列の長さを求めるサンプル */
SELECT STR,LENGTH(STR) FROM testdb.WORK;
MySQLのデフォルトではUTF8の文字コードが設定されており、英数字は1文字1バイト、日本語・漢字は1文字3バイトとなります。文字コードや日本語・漢字で指定した文字によって返す文字数が異なります。
下記の例では、MySQLの文字コードがUTF-8のため、日本語については12バイトが返されます。
SQLServerの実行例
/* SQL Server 文字列の長さを求めるサンプル */
SELECT STR,LEN(STR) FROM [testdb].[dbo].[WORK];
末尾に空白がある場合
末尾に半角スペースがある場合、末尾の半角スペースは削除されます。
/* SQL Server 末尾に半角空白があるサンプル */
SELECT LEN('ある夜空 ') ;
/* SQL Server 末尾に全角空白があるサンプル */
SELECT LEN('ある夜空 ') ;