2009-05-13 9 views
43

がアクティブ単語でこれはSQLでブール・テストを行う適切な方法ですか?

# Find all active users 
select * from users where active 

# Find all inactive users 
select * from users where NOT active 

(0または1小さな整数、)「ブールフィールド」であると想定し、「NOT」演算子は、ブールフィールドに直接適用することができますか?

+0

ブール型フィールドは通常 'int'ではなく 'bit'と入力されます – Davis

+0

「active = 0」が「いいえ」であることに疑いの余地はないので、可能な回避策。 "NOT active"と "active = 0"の間の選択では、私は気にしません - 必ず説明する必要がある場合は、コメントを追加してください。 (将来のコードを扱う人が、真偽を理解していない場合は<-> 1/0の関係、おそらく誰かがあなたのコードに触れてはいけません...) –

+1

@Eric:SQLでは述語が必要ですブール結果を生成する。 "active"はそのような結果を生成しません。なぜなら、 'active'がBITデータ型であっても - BITはブール値ではないため、0..1の範囲の整数値です。したがって、ブール値を生成するためにある種の比較を行う必要があります。 "NOT(active = 1)"は動作しますが、 "not active"は動作しません。 – Tomalak

答えて

7

SQL Serverでは、通常使用します。私は他のデータベースエンジンについて知らない。

select * from users where active = 0 
46

SQLのブール値はビットフィールドです。これは正しい構文は、1または0のいずれかを意味します...

select * from users where active = 1 /* All Active Users */ 

または

select * from users where active = 0 /* All Inactive Users */ 
+7

@ JoseBasilio- PostgreSQLを除く:http://www.postgresql.org/docs/9.1/static/datatype-boolean.html – Yarin

+0

ほとんどのDBでは、フィールドはNULLでもかまいません。アクティブなフィールドのデフォルト値でテーブルを設定しない場合は、NULLもチェックする必要があります。 – IAmNaN

+0

Rite(4)内でSQLiteを使うと、 'f'や 't'(文字ではなく)を使ってクエリを作成しました。上記のクエリを使用すると動作しませんでした。しかし、 "SELECT"モデル。* FROM "model" WHERE "boolean_column" = 'f'''' worked –

10

MS SQL 2008も真または偽の文字列バージョンを使用することができます

select * from users where active = 'true' 
-- or -- 
select * from users where active = 'false' 
+0

うわー、それはクールです...私はうまくいきませんでした。 –

13

Postgresを使用すると、あなたは使用することができます

select * from users where active 

または

select * from users where active = 't' 

整数値を使用する場合は、文字列として考慮する必要があります。 整数値は使用できません。

select * from users where active = 1 -- Does not work 

select * from users where active = '1' -- Works 
+0

が本当かTRUEか1かを予想していたかどうかを調べるために、あなたの答えは非常に役に立ちました – jpwynn

+4

+1 PostgreSQLのブールオプションに関する詳細:http://www.postgresql.org/docs/9.1/static/datatype- boolean.html – Yarin

+0

また、PosgtresはOPの構文を受け入れます: 'where active'、 'not active '。http://www.postgresql.org/docs/8.2/static/functions-logical.htmlを参照してください。 –

3

私が個人的にチャーを使用して好む(1)の値「Y」および「N」ブール値のネイティブ型を持っていないデータベースに対して有します。文字は、それを読んでいる人が真となり、0が偽に相当すると仮定した数よりも、よりユーザフレンドリーです。

(N)Hibernateを使用すると、 'Y'と 'N'もうまくマッピングされます。

0

PostgreSQLはブール型をサポートしているため、SQLクエリはPostgreSQLで完全に機能します。

-1

uはSQLite3のは用心使用してrの場合:

それが唯一の 'T' または 'F' を取ります。 1または0ではありません。TRUEまたはFALSE。

ちょうど難しい方法を学んだ。

関連する問題