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

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

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

8 ответов


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


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

со ссылкой на статья MSDN:

bit (Transact-SQL)

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

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

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


вы ищете 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-valued-logic/


в SQL Server существует логический тип данных. Его значения могут быть 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;

С точки зрения форматирования, a 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)
);

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


можно использовать Bit тип данных в SQL Server для хранения данных boolean.


SQL Server использует Bit тип


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