• ベストアンサー

postgresql のupper関数について

いつもお世話になっております。 標題についてご教授下さい。 DBからある項目をupper関数を使って変換しているのですが、 変換されません。 UPPERは文字列などを大文字に変換する認識なのですが、 わかりません。 [table A] key1 Test key2 test SELECT upper(key1), upper(key2) from A 結果 key1   key2 Test  TEST 全角の英字が変換されません。 そもそも全角はtranslateしないとだめでしょうか。 お手数ですが、宜しくお願いします。  

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada59
  • ベストアンサー率74% (29/39)
回答No.2

ロケール(lc_ctype)の設定とロケールライブラリの実装に依存します。 日本語のロケールであればロケールライブラリの実装に依存しますが、少なくとも手元のLinux環境ではupper関数で全角アルファベットの小文字を大文字に変換できます。 現在のロケールは以下のSQLで確認できます。 =# SHOW lc_ctype; lc_ctype ---------- C (1 行) Cというのはロケールなしの状態です。これが日本語のロケール(ja_JP.文字コード)になっていれば全角アルファベットでも変換できます。 PostgreSQL 8.4以降であればデータベースごとにロケールを指定できます。以下のSQLで日本語のロケールを指定してデータベースを作成できます。 =# CREATE DATABASE test TEMPLATE template0 LC_CTYPE 'ja_JP.UTF8'; CREATE DATABASE 日本語のロケールのデータベースに接続し、upper関数を実行すると全角アルファベットでも大文字に変換できます。 =# \c test You are now connected to database "test". =# SELECT upper('a'); upper ------- A (1 row)

prr4e
質問者

お礼

返信が遅れて申し訳ありません。 >SHOW lc_ctype; 確かに手前の環境では Cと表示されました。 これが原因だったんですね。 ありがとうございます。 大変参考になりました。

その他の回答 (2)

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.3

#1 です。 おー、#2さんのおっしゃる通りでした。 今、試してみました。 全角のまま大文字になるんですね。 勉強になりました。

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

>そもそも全角はtranslateしないとだめでしょうか はい。upper は半角小文字を大文字にするだけです。 upper( translate( カラム ) ) ですね。

関連するQ&A