SELECT length(<列名>) FROM <テーブル名>
length関数 の引数と戻り値
文字数 = length(text)
text | 対象の 列名 や 文字列リテラル |
戻り値 | 与えられたテキストの文字数 または null |
戻り値の型 | integer |
length関数 の使用例
文字列リテラルの文字数を数える
次のサンプルコードは、文字列リテラル '1234567890' と '1234567890' の文字数を表示します。これらはそれぞれ半角文字と全角文字ですが、length関数は文字数を返すため、どちらの結果も10となります。SELECT length('1234567890')
,length('1234567890');
テーブルに格納されている文字の文字数を数える
次のサンプルコードは テーブル 'sample_table' の列 'soft_name' の文字数を表示します。SELECT *
,length(soft_name)
FROM sample_table;
検索条件としての利用
length関数を検索条件として使用すると、特定の文字数に一致するレコードを検索することができます。ただし、インデックスが効かないため、レコード件数が多い場合は処理に時間がかかる可能性があります。文字数を使用した検索を頻繁に行う場合、予めデータ挿入(insert)時に文字数を取得して格納し、その列に対してインデックスを作成します。次のサンプルコードは テーブル 'sample_table' の列 'soft_name' の文字数 が 10 文字 のレコードを抽出します。
SELECT soft_name
FROM sample_table
WHERE length(soft_name) = 10;
並び替えとしての利用
ORDER BY 句で length関数を使用すると、文字数順にレコードを並べ替えることができます。 ただしインデックスが効かないため、レコード件数が多い場合は処理に時間がかかる可能性があります。次のサンプルコードは テーブル 'sample_table' の列 'soft_name' の文字数が少ない順にレコードをソートし、その結果を表示します。
SELECT *
FROM sample_table
ORDER BY length(soft_name);
length関数 使用時の注意
length関数は nullが引数として与えられた場合、0 ではなく null を返します。 0 を返したい場合は、COALESCE関数を使用して null を 0 に置き換えます。次にCOALESCE関数を使用し、length関数 の 結果が null の場合に 0 に置き換える例を示します。
SELECT COALESCE(length(null), 0);
参考資料
- PostgreSQL公式ドキュメント - 9.4. String Functions and Operators
- PostgreSQL公式ドキュメント - 9.5. Binary String Functions and Operators
- PostgreSQL公式ドキュメント - 9.18.2. COALESCE - 9.18. Conditional Expression
検証環境
- PostgreSQL 16.1 on x86_64-pc-linux-musl, compiled by gcc (Alpine 12.2.1_git20220924-r10) 12.2.1 20220924, 64-bit
- pgAdmin 8.2
- Docker image: postgres:16.1-alpine3.18
- Docker image: dpage/pgadmin4
- Docker Desktop 4.26.1 (131620)
- Docker Engine Engine: 24.0.7
- Docker Compose v2.23.3-desktop.2
- Windows 10 Enterprise Version 22H2 OS Build 19045.3930 Experience: Windows Feature Experience Pack 1000.19053.1000.0