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?
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 */
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
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'
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
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.
PostgreSQL supporte les types booléens, ainsi votre requête SQL fonctionnerait parfaitement dans PostgreSQL.