Y a-t-il un type de données booléen dans Microsoft SQL Server comme dans MySQL?

y a-t-il un type de données booléen dans Microsoft SQL Server comme il y en a dans MySQL?

si oui, quelle est l'alternative dans MS SQL Server?

264
demandé sur iliketocode 2010-06-29 09:16:08

8 réponses

vous pouvez utiliser le type de données BIT pour représenter les données booléennes. La valeur d'un champ BIT est 1,0 ou nulle.

353
répondu kristian 2017-11-08 10:18:34

vous pouvez utiliser le BIT type de données, probablement paramètre est comme NOT NULL :

citant le article MSDN :

bit (Transact-SQL)

un type de données entier qui peut prendre une valeur de 1, 0, ou NULL.

le moteur de base de données SQL Server optimise le stockage des colonnes de bits. Si il y a 8 colonnes ou moins de bits dans une table, les colonnes sont stockées comme 1 octet. S'il y a de 9 jusqu'à 16 colonnes de bits, les colonnes sont stockées comme 2 bytes, et ainsi de suite.

les valeurs de chaîne TRUE Et FALSE peuvent être converties en valeurs bit: TRUE est converti en 1 et FALSE est converti en 0.

76
répondu Daniel Vassallo 2010-06-29 05:19:07

vous recherchez un bit . Il stocke 1 ou 0 (ou NULL ).

alternativement, vous pouvez utiliser les cordes 'true' et 'false' à la place de 1 ou 0, comme so -

declare @b1 bit = 'false'
print @b1                    --prints 0

declare @b2 bit = 'true'
print @b2                    --prints 1

en outre, toute valeur non 0 (positive ou négative) est évaluée à (ou convertie en dans certains cas) a 1.

declare @i int = -42
print cast(@i as bit)    --will print 1, because @i is not 0

notez que SQL Server utilise trois valeurs logiques ( true , false , et NULL ), puisque NULL est une valeur possible du type de données bit . Voici les tables de vérité pertinentes -

enter image description here

plus d'information sur les trois logiques valorisées -

exemple de trois logiques valorisées dans le serveur SQL

http://www.firstsql.com/idefend3.htm

https://www.simple-talk.com/sql/learn-sql-server/sql-and-the-snare-of-three-valued-logic /

35
répondu iliketocode 2017-07-19 17:38:55

il y a un type de données booléen dans SQL Server. Ses valeurs peuvent être TRUE , FALSE ou UNKNOWN . Toutefois, le type de données booléen n'est que le résultat d'une expression booléenne contenant une combinaison quelconque de opérateurs de comparaison (par exemple = , <> , < , >= ) ou opérateurs logiques (p.ex. AND , OR , IN , EXISTS ). Les expressions booléennes sont seulement permises in a handful of places including the WHERE clause, HAVING article, la clause WHEN d'une clause CASE expression ou le prédicat d'une clause IF ou WHILE .

pour tous les autres usages, y compris le type de données d'une colonne dans un tableau, booléen n'est pas autorisé. Pour ceux autres usages, le type de données BIT est préféré. Il se comporte comme un INTEGER réduit qui ne permet que les valeurs 0 , 1 et NULL , à moins qu'il ne soit restreint davantage par une contrainte de colonne NOT NULL ou une contrainte CHECK .

pour utiliser une colonne BIT dans une expression booléenne, elle doit être comparée en utilisant un opérateur de comparaison tel que = , <> ou IS NULL . par exemple

SELECT
    a.answer_body
FROM answers AS a
WHERE a.is_accepted = 0;

du point de vue du formatage, une valeur bit est habituellement affichée sous la forme 0 ou 1 dans le logiciel client. Lorsqu'un format plus convivial est requis, et qu'il ne peut pas être traité à un niveau d'application devant la base de données, il peut être converti "juste à temps" en utilisant une expression CASE par exemple

SELECT
    a.answer_body,
    CASE a.is_accepted WHEN 1 THEN 'TRUE' ELSE 'FALSE' END AS is_accepted
FROM answers AS a;

stocker des valeurs booléennes comme un type de données de caractère comme char(1) ou varchar(5) est également possible, mais qui est beaucoup moins clair, a plus de stockage/la surcharge du réseau, et exige CHECK contraintes sur chaque colonne de restreindre des valeurs illégales.

pour référence, le schéma du tableau answers serait similaire à:

CREATE TABLE answers (
    ...,
    answer_body nvarchar(MAX) NOT NULL,
    is_accepted bit NOT NULL DEFAULT (0)
);
31
répondu Mark Chesney 2016-08-06 19:55:34

utilisez le type de données Bit . Il a les valeurs 1 et 0 quand il traite avec lui dans natif T-SQL

7
répondu Rodrick Chapman 2016-08-06 19:56:15

vous pouvez utiliser Bit DataType dans SQL Server pour stocker des données booléennes.

7
répondu Pranay Rana 2016-08-06 19:56:29

SQL Server utilise le Bit datatype

6
répondu HackedByChinese 2016-08-06 19:56:03

j'utilise TINYINT(1) type de données afin de stocker des valeurs booléennes dans le serveur SQL bien que BIT soit très efficace

0
répondu Bipul Roy 2017-11-14 06:33:52