Есть ли тип булевских данных в Microsoft SQL Server, как в MySQL?

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

Если да, то какова альтернатива в MS SQL Server?

Ответ 1

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

Ответ 2

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

Цитата статья MSDN:

бит (Transact-SQL)

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

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

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

Ответ 3

Вы ищете 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 (положительное или отрицательное) оценивается (или преобразуется в некоторых случаях) a 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. Вот соответствующие таблицы истинности -

введите описание изображения здесь

Дополнительная информация о трехзначной логике -

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

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

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

Ответ 4

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

Для всех других применений, включая тип данных столбца в таблице, boolean не допускается. Для этих других применений предпочтительным является тип данных 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)
);

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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