PostgreSQL - 文字列の大文字・小文字を変換

アルファベットを小文字に変換するには lower関数を、大文字に変換するには upper関数 を使用します。

大文字小文字に変換
SELECT lower(<列名>) FROM <テーブル名>

小文字大文字に変換

SELECT upper(<列名>) FROM <テーブル名>

lower関数 と upper関数 の 引数 と 戻り値

lower関数

変換結果 = lower(text)
text 対象の 列名 や 文字列リテラル
戻り値 渡された文字列を小文字に変換した結果 または null
戻り値の型 text

upper関数

変換結果 = upper(text)
text 対象の 列名 や 文字列リテラル
戻り値 渡された文字列を大文字に変換した結果 または null
戻り値の型 text

lower関数 と upper関数 の使用例

次の SQL は、半角文字の 'PostgreSQL' と 多バイト文字の 'PostgreSQL' を 大文字小文字に変換し、表示します。なお、変換結果は環境により異なる可能性があります。詳細は次章を参照してください。
SELECT lower('PostgreSQL')           --結果 = "postgresql"
      ,upper('PostgreSQL')           --結果 = "POSTGRESQL"
      ,lower('PostgreSQL')  --結果 = "postgresql"
      ,upper('PostgreSQL')  --結果 = "POSTGRESQL"
イメージ
pgAdminを使用し、サンプルSQLを実装している様子

変換規則について

変換の規則は データベース の ロケール(locale) と 照合順序(COLLATE) の影響を受けます。

例えば 多バイト文字(全角文字) のアルファベットで、変換が行われるかは設定によります。

ロケール(locale) とは?

ロケールは国際化対応するための仕組みで、日時や通貨の書式、文字の比較方法、ソート方法などを設定します。

ロケールはデータベース作成時に指定でき、作成後には変更できません。 ロケールにはいくつかの設定項目がありますが、lower関数upper関数 に 影響するのは lc_ctype です。

ロケールの確認方法

次のSQL を実行すると データベース名 と ロケールlc_ctype が表示されます。
SELECT datname, datctype FROM pg_database;

また、次のSQLを使用してもロケール設定を確認できますが、環境によっては表示されない設定項目があります。

SELECT name, setting, context FROM pg_settings WHERE name LIKE 'lc%';
ロケール設定の種類
name 説明
LC_COLLATE 文字列の並び替え順序
LC_CTYPE 文字の分類・比較方法
LC_MESSAGES メッセージの言語
LC_MONETARY 通貨の書式
LC_NUMERIC 数字の書式
LC_TIME 日付と時刻の書式
イメージ
pgAdminを使用し、ロケール(lc_ctype)を確認している様子

照合順序(COLLATE) とは?

ソート順 と 文字の分類方法 は ロケール設定(lc_collate と lc_ctype)で行いますが、これらはデータベース作成後に変更できません。これを緩和するための機能が照合順序で、SQL実行時 や テーブルの列 に対して 照合順序 を指定することで、これらを変更することができます。

照合順序の確認方法

次のSQLを実行すると スキーマ名(table_schema)、テーブル名(table_name)、カラム名(column_name)、照合順序(collation_name) が表示されます。照合順序null(未設定) の場合、ロケール設定が使用されます。
SELECT table_schema, table_name, column_name, collation_name
  FROM information_schema.columns
  WHERE table_name = '<テーブル名>'
イメージ
pgAdminを使用し、照合順序を確認している様子

照合順序の指定方法

SQLの実行時やテーブルの作成時に COLLATE 句を使用します。詳細は PostgreSQL公式ドキュメント - 24.2. Collation Support を参照してください。

参考資料

検証環境