PostgreSQL - 文字数を取得する

文字数の確認には、length関数を使用します。この関数はバイト数ではなく文字数を返すため、半角と全角の文字を問わず、同じ結果を返します。

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関数を使用して null0 に置き換えます。

次にCOALESCE関数を使用し、length関数 の 結果が null の場合に 0 に置き換える例を示します。

SELECT COALESCE(length(null), 0);

参考資料

検証環境