PostgreSQL(バージョン9.4、pgAdmin3)では、ブール列のあるテーブルでselectを実行すると、データ出力に「t」または「f」が表示されます。 CASEステートメントを記述したり、JOINSを実行したりすることなく、ブール値をTRUEまたはFALSEとしてキャスト/変換したいと思います。
ところで、PostgreSQL独自の ドキュメント によると、この動作はSQL標準ではありません。
キーワードTRUEおよびFALSEは、優先される(SQL準拠の)使用法です。
PS:これは、pgAdminでSQLエディターを使用している場合にのみ発生します。 pgAdminオブジェクトブラウザを使用し、同じテーブルにドリルダウンし、右クリックしてデータを表示し、上位100行を表示すると、同じブール列が期待値/標準としてTRUEまたはFALSEとして表示されます。
表示するのがリテラルTRUE
またはFALSE
だけである場合は、提案したようなcaseステートメントを使用できます。 PostgreSQLはTRUE
、true
、yes
、on
、y
、t
および1
trueの場合、出力をどのように表示するかを制御します。
Where句は次のように記述できます。
select * from tablename where active
--or--
select * from tablename where active = true
(私の推奨事項はPostgreSQLと同じです-trueを使用してください)
選択する場合、caseステートメントを使用することをためらうかもしれませんが、出力文字列リテラルを制御するためにそれを行うことをお勧めします。
クエリは次のようになります。
select
case active = TRUE then 'TRUE' else 'FALSE' end as active_status,
...other columns...
from tablename
where active = TRUE;
SQLFiddleの例: 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 |
text
への単純なキャストは仕事をします(大文字のスペルが必要でない限り):
SELECT true::text AS t, false::text AS f;
t | f
------+-------
true | false
それ以外の場合、テキスト表現は、接続に使用するライブラリとクライアントに依存します。インスタンスのJDBCは、boolean
値を「true」/「false」としてレンダリングします:
Postgres9.5( リリースノート を引用)でこの変更を気に入るはずです:
テキストとの間で変換するのではなく、PL/pgSQL割り当てのデータ型変換に割り当てキャスト動作を使用します(Tom Lane)
この変更により、ブール値の文字列への変換により、
true
またはfalse
ではなくt
またはf
が生成されます 。他の型変換は、以前よりも多くの場合に成功する可能性があります。たとえば、数値3.9
を整数変数に割り当てると、失敗するのではなく4
が割り当てられるようになりました。特定のソースおよびデスティネーションタイプに割り当てグレードのキャストが定義されていない場合、PL/pgSQLは以前のI/O変換動作にフォールバックします。
大胆な強調鉱山。