2015-12-23 14 views
9

PostgreSQL(バージョン9.4、pgAdmin3)では、ブール値の列を含むテーブルを選択すると、データ出力に 't'または 'f'が表示されます。ブール値を真または偽としてCASE文やJOINSなどを書くことなくキャスト/変換したいと思います。ブール値を選択(PostgreSQL/pgAdmin)でTRUEまたはFALSEに戻します。

BTW、PostgreSQLの所有者​​によると、この動作はSQL標準ではありません。

キーワード(TRUEおよびFALSE)が優先(SQL準拠)です。

PS:これは、pgAdminでSQLエディタを使用している場合にのみ発生します。 pgAdminオブジェクトブラウザを使用して、同じテーブルにドリルダウンし、右クリック、データの表示、Top 100行の表示、同じブール列がTRUEまたはFALSEとして表示されます。

+1

"t"/"f"または "TRUE"/"FALSE"として表示するかどうかは、単に表示上の問題です。ブール値はTRUEまたはFALSEの値を返しています(注記、引用符なし)。どのように表示されるのかは、そのソフトウェアに依存します。ここでは表示に関する問題を回避するために文字列値を返そうとしないことを強くお勧めします。 –

+0

修正 - 表面的な問題です。私は明らかにするために私の質問のタイトルにpgAdminを追加しました。また、表示は特にpgAdmin SQLエディタにあります。だから私はpgAdminの次回リリースでの強化要求だと思っています - 独自のドキュメントとSQL標準と一貫性を持たせるために;-) –

答えて

11

表示したいのは、リテラルTRUEまたはFALSEです。提案したようにcase文を使用できます。 PostgreSQLはTRUEtrueyesonyt1を真として扱っているので、出力をどのようにしたいかを制御したいと思います。句は次のように記述することができ

select * from tablename where active 
--or-- 
select * from tablename where active = true 

(私の推薦は、PostgreSQLと同じである - 本当の使用)

を選択すると、case文を使用するにはためらいがあるかもしれないが、私は」出力文字列リテラルを制御できるようにすることをお勧めします。

あなたのクエリは次のようになります。

select 
    case active = TRUE then 'TRUE' else 'FALSE' end as active_status, 
    ...other columns... 
from tablename 
where active = TRUE; 

SQLFiddle例:(あなたが大文字のスペルを必要としない限り)textへの単純なキャストが仕事をするhttp://sqlfiddle.com/#!15/4764d/1

create table test (id int, fullname varchar(100), active boolean); 
insert into test values (1, 'test1', FALSE), (2, 'test2', TRUE), (3, 'test3', TRUE); 

select 
    id, 
    fullname, 
    case when active = TRUE then 'TRUE' else 'FALSE' end as active_status 
from test; 

| id | fullname | active_status | 
|----|----------|---------------| 
| 1 | test1 |   FALSE | 
| 2 | test2 |   TRUE | 
| 3 | test3 |   TRUE | 
+0

私はSQLの専門家ではありません。 SELECTで表示したのと同じように、CASE文を文書化して回答を完成できますか?私はした –

+0

ああ、あなたは賭けた。私は例を追加しました – zedfoxus

+0

select *、現時点ではTRUEです。TRUEならばTRUEです。tablenameの後にカンマが付きます。* –

6

SELECT true::text AS t, false::text AS f; 

t | f 
------+------- 
true | false 

これ以外の場合、テキスト表現はライブラリとクライアントによって異なりますあなたは接続するために使用します。

  • :あなたは9.5(現在は候補者を解放する)Postgresの中で、この変更を愛する

    SQL Fiddle.

    :インスタンスのJDBCは、とにかく '真'/'偽' としてboolean値をレンダリングPL/pgSQL の代入でデータ型変換に代入キャスト動作を使用する(トム・レーン)

    この変更はtruefalse、ないtまたはfを生成する文字列にブールの変換を引き起こします。他のタイプの変換は、より多くの場合に成功する可能性があります。 たとえば、数値3.9を整数 に割り当てると、失敗するのではなく4が割り当てられます。特定のソースタイプと宛先タイプに対して割り当てグレード キャストが定義されていない場合、 PL/pgSQLは古いI/O変換動作に戻ります。

太字強調鉱山。

関連する問題