web-dev-qa-db-ja.com

SQLServerとPostgreSQLの両方で `where boolean value = false`を実行する方法はありますか?

SQLServerと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").. type crapを実行する代わりに、使用できるユニバーサル構文があればいいのですが。

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

17
Earlz

SQL Serverは、ビット値をtrueまたはfalseのvarchar値に自動的に変更します。したがって、以下がそこで機能します。

select * from table where booleancol = 'false'

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

17
NotMe

申し訳ありませんが、この部分は単に真実ではありません。半分未満-真;-)

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の柔軟な構文の例であり、他のデータベースからのアプリの移植を非常に簡単にします。

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

31
filiprem

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

1
araqnid

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

0
Phil Sandler