18

Sql Server と PostgreSQL の両方で実行できるアプリケーションを作成しようとしています。

基本的に共通の表現が見つからないようです

 select * from table where booleancol=false

SQL Server では、私がしなければならない (ビット型の既定値は true または false でなければならないため、非常に混乱しますが、それらを true または false に割り当てたり、それに対してテストしたりすることはできません)。

select * from table where booleancol=0

PostgreSQLで私がしなければならない

select * from table where booleancol is false

if(dbformat=="postgres")..私たちのプログラムにはこれを行うクエリがかなりたくさんあるので、タイプのがらくたを行う代わりに使用できるユニバーサル構文があればいいのにと思います..

また、列をブール/ビット型のままにして、整数型に変更しないことをお勧めします..それはオプションですが..

4

5 に答える 5

33

申し訳ありませんが、この部分は真実ではありません。半分以下です;-)

PostgreSQLで私がしなければならない

select * from table where booleancol is false

実際、次の構文はすべて PostgreSQL で有効です。

select * from table where not booleancol
select * from table where booleancol = 'f'
select * from table where booleancol = 'false'
select * from table where booleancol = 'n'
select * from table where booleancol is false
select * from table where booleancol is not true
select * from table where booleancol = false
select * from table where booleancol <> true
select * from table where booleancol != true
select * from table where booleancol <> 'TRUE'

これは postgres の柔軟な構文の例であり、他のデータベースからのアプリの移植が非常に簡単になります。

ドキュメントを参照してください。

于 2010-01-06T09:52:59.457 に答える
18

SQL Server は、ビット値を true または false の varchar 値に自動的に変更します。したがって、次のように動作します。

select * from table where booleancol = 'false'

postgreが同じことをするかどうかはわかりません。

于 2009-12-22T20:21:14.617 に答える
1

仕事では、char(1) 列で「T」と「F」を使用して、SQL Server のブール値を表します。この種の互換性が理由かどうかはわかりませんが、「booleancol = 'F'」がどちらのフレーバーのデータベースでも機能することを意味します。

于 2009-12-22T20:39:09.877 に答える
0

それがオプションである場合は、ある RDBMS から別の RDBMS に SQL を変換する問題を処理できるオブジェクト リレーショナル マッピング フレームワークを検討してください。

于 2009-12-22T20:20:21.800 に答える
-9

ORM を使用してください。現在、SQL を手動でコーディングする必要はありません。それらは存在するので、あなたが遭遇したまさにその問題を解決します。

于 2009-12-22T20:19:25.423 に答える