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バイトが返されます。

LEN/LENGTH関数サンプル実行結果

SQLServerの実行例

/* SQL Server 文字列の長さを求めるサンプル */
SELECT STR,LEN(STR) FROM [testdb].[dbo].[WORK];
LEN/LENGTH関数サンプル実行結果

末尾に空白がある場合

末尾に半角スペースがある場合、末尾の半角スペースは削除されます。

/* SQL Server 末尾に半角空白があるサンプル */
SELECT LEN('ある夜空 ') ;

/* SQL Server 末尾に全角空白があるサンプル */
SELECT LEN('ある夜空 ') ;
LEN/LENGTH関数サンプル実行結果