Есть ли логический тип данных в Microsoft SQL Server, как в MySQL? - PullRequest
316 голосов
/ 29 июня 2010

Существует ли логический тип данных в Microsoft SQL Server, как в MySQL?

Если это так, что является альтернативой в MS SQL Server?

Ответы [ 9 ]

430 голосов
/ 29 июня 2010

Вы можете использовать тип данных BIT для представления логических данных.Значение поля BIT равно 1,0 или равно нулю.

84 голосов
/ 29 июня 2010

Возможно, вы захотите использовать тип данных BIT, возможно, для него задано значение NOT NULL:

Цитирование статьи MSDN :

бит (Transact-SQL)

Целочисленный тип данных, который может принимать значение 1, 0 или NULL.

База данных SQL ServerДвижок оптимизирует хранение битовых столбцов.Если в таблице 8 или менее битовых столбцов, столбцы сохраняются как 1 байт.Если есть от 9 до 16 битовых столбцов, столбцы сохраняются в 2 байта и т. Д.

Строковые значения TRUE и FALSE могут быть преобразованы в битовые значения: TRUE преобразуется в 1, а FALSE -преобразуется в 0.

45 голосов
/ 02 декабря 2014

Вы ищете bit.Он хранит 1 или 0 (или NULL).

В качестве альтернативы, вы можете использовать строки 'true' и 'false' вместо 1 или 0, например, так -

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

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

Кроме того, любое значение, отличное от 0 (положительное или отрицательное), оценивается (или преобразуется в некоторых случаях) в 1.

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

Обратите внимание, что SQL Server использует трехзначную логику (true, false и NULL), поскольку NULL является возможным значением типа данных bit.Вот соответствующие таблицы истинности -

enter image description here

Подробнее о трехзначной логике -

Пример трехзначной логики вSQL Server

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

https://www.simple -talk.com / sql / learn-sql-server / sql-and-the-snare-of-threeзначной логики /

38 голосов
/ 22 августа 2015

В SQL Server есть логический тип данных. Его значения могут быть TRUE, FALSE или UNKNOWN. Однако логический тип данных является только результатом логического выражения, содержащего некоторую комбинацию операторов сравнения (например, =, <>, <, >=) или логических операторов (например, AND, OR, IN, EXISTS). Логические выражения допускаются только в нескольких местах, включая предложение WHERE, предложение HAVING, предложение WHEN выражения CASE или предикат оператора управления потоком IF или WHILE.

Для всех других случаев использования, включая тип данных столбца в таблице, логическое значение не допускается. Для этих других применений предпочтителен тип данных BIT. Он ведет себя как суженный INTEGER, который допускает только значения 0, 1 и NULL, если только он не ограничен с помощью ограничения столбца NOT NULL или ограничения CHECK.

Чтобы использовать столбец BIT в логическом выражении, его необходимо сравнить с помощью оператора сравнения, такого как =, <> или IS NULL. например,

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

С точки зрения форматирования значение bit обычно отображается как 0 или 1 в клиентском программном обеспечении. Когда требуется более удобный для пользователя формат, и он не может быть обработан на уровне приложения перед базой данных, он может быть преобразован «точно в срок» с использованием выражения CASE, например,

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

Также возможно сохранение логических значений в виде символьных типов данных, таких как char(1) или varchar(5), но это гораздо менее понятно, требует больше ресурсов хранения / сети и требует ограничений CHECK для каждого столбца для ограничения недопустимых значений .

Для справки схема таблицы answers будет выглядеть следующим образом:

CREATE TABLE answers (
    ...,
    answer_body nvarchar(MAX) NOT NULL,
    is_accepted bit NOT NULL DEFAULT (0)
);
7 голосов
/ 29 июня 2010

Используйте тип данных Bit. Он имеет значения 1 и 0 при работе с ним в собственном T-SQL

7 голосов
/ 29 июня 2010

Вы можете использовать Bit DataType в SQL Server для хранения логических данных.

6 голосов
/ 29 июня 2010

SQL Server использует Bit тип данных

0 голосов
/ 09 ноября 2018

Вы можете использовать тип данных BIT. Это либо 0, 1, либо ноль. Если вы конкретно хотите ИСТИНА или ЛОЖЬ, вы можете использовать перечисление для преобразования 0 и 1 в Истину и Ложь. И передать это как строку.

0 голосов
/ 14 ноября 2017

Я использую TINYINT(1) тип данных для хранения логических значений в SQL Server, хотя BIT очень эффективен

...