web-dev-qa-db-fra.com

Est-ce la bonne façon de faire un test booléen en SQL?

Supposer que actif est un "champ booléen" (minuscule int, avec 0 ou 1)

# Find all active users
select * from users where active 

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

En mots, l’opérateur "NOT" peut-il être appliqué directement sur le champ booléen?

65
Eric

Un booléen en SQL est un champ de bits. Cela signifie 1 ou 0. La syntaxe correcte est la suivante:

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

ou

select * from users where active = 0 /* All Inactive Users */
74
Jose Basilio

Avec Postgres, vous pouvez utiliser

select * from users where active

ou

select * from users where active = 't'

Si vous souhaitez utiliser une valeur entière, vous devez la considérer comme une chaîne. Vous ne pouvez pas utiliser de valeur entière.

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

select * from users where active = '1' -- Works 
18
Luc M

MS SQL 2008 peut également utiliser la version chaîne de true ou false ...

select * from users where active = 'true'
-- or --
select * from users where active = 'false'
11
Scott Ivey

Dans SQL Server, vous utiliseriez généralement. Je ne connais pas les autres moteurs de base de données.

select * from users where active = 0
9
Jonathan Allen

Personnellement, je préfère utiliser char (1) avec les valeurs 'Y' et 'N' pour les bases de données qui n'ont pas de type natif pour boolean. Les lettres sont plus conviviales que les nombres qui supposent que ceux qui le liront maintenant que 1 correspond à vrai et 0 correspond à faux.

'Y' et 'N' correspondent également bien lors de l'utilisation de (N) Hibernate.

3
stili

PostgreSQL supporte les types booléens, ainsi votre requête SQL fonctionnerait parfaitement dans PostgreSQL.

0
Jordi Cabot