Есть ли логический тип данных в 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
тип данных. Здесь соответствующие таблицы истинности-
дополнительная информация о трехзначной логике -
пример трехзначной логики в 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)
);
Я использую TINYINT(1)
тип данных для хранения логических значений в SQL Server, хотя BIT
очень эффективен