プロが教えるわが家の防犯対策術!

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

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

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

[table A]
key1 Test
key2 test

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

結果
key1   key2
Test  TEST

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

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


 

A 回答 (3件)

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



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

upper( translate( カラム ) )

ですね。
    • good
    • 0

ロケール(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)
    • good
    • 0
この回答へのお礼

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

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

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

大変参考になりました。

お礼日時:2013/06/03 14:40

#1 です。



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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す