こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

postgresql のupper関数について

いつもお世話になっております。

標題についてご教授下さい。

DBからある項目をupper関数を使って変換しているのですが、
変換されません。
UPPERは文字列などを大文字に変換する認識なのですが、
わかりません。

[table A]
key1 Test
key2 test

SELECT upper(key1), upper(key2) from A

結果
key1   key2
Test  TEST

全角の英字が変換されません。
そもそも全角はtranslateしないとだめでしょうか。

お手数ですが、宜しくお願いします。


 

投稿日時 - 2013-04-24 18:45:00

QNo.8057818

困ってます

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

ロケール(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
-------

(1 row)

投稿日時 - 2013-04-24 21:07:13

お礼

返信が遅れて申し訳ありません。

>SHOW lc_ctype;
確かに手前の環境では
Cと表示されました。

これが原因だったんですね。
ありがとうございます。

大変参考になりました。

投稿日時 - 2013-06-03 14:40:46

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

#1 です。

おー、#2さんのおっしゃる通りでした。
今、試してみました。

全角のまま大文字になるんですね。
勉強になりました。

投稿日時 - 2013-04-24 22:16:47

ANo.1

>そもそも全角はtranslateしないとだめでしょうか

はい。upper は半角小文字を大文字にするだけです。

upper( translate( カラム ) )

ですね。

投稿日時 - 2013-04-24 20:33:11

あなたにオススメの質問