Существует ли тип булевых данных в Microsoft SQL Server, как в MySQL?
Если да, то какова альтернатива в MS SQL Server?
Существует ли тип булевых данных в Microsoft SQL Server, как в MySQL?
Если да, то какова альтернатива в MS SQL Server?
Вы можете использовать тип данных BIT
для представления булевых данных. Значение поля BIT
равно 1,0 или null.
Возможно, вы захотите использовать тип данных 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.
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/
В 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)
);
Вы можете использовать Bit
DataType в SQL Server для хранения логических данных.
Используйте тип данных Bit
. Он имеет значения 1 и 0 при работе с ним в собственном T-SQL
SQL Server использует тип данных Bit
Я использую тип данных TINYINT(1)
для хранения логических значений в SQL Server, хотя BIT
очень эффективен