Skip to content

Учебник по логическим типам SQL

Пересказ статьи Daniel Calbimonte. SQL Boolean Tutorial


Логический (булев) тип данных отсутствует в SQL Server. Другие базы данных, подобные Oracle и MySQL, поддерживают логический тип данных, который принимает значения TRUE и FALSE.

SQL Server использует тип данных Bit, который принимает значения 0, 1 и NULL, которые могут использоваться вместо значений TRUE, FALSE и NULL. Здесь мы рассмотрим несколько примеров на вставку и выборку этих значений.

Что это за тип данных bit?


Этот тип данных может хранить 3 значения, 1, 0 и NULL. Этот тип данных более эффективен, чем тип данных Boolean, используемый другим СУБД, поскольку он использует только один бит для хранения данных. Давайте рассмотрим примеры его использования.

Примеры логического типа в SQL Server


Следующий пример создаст переменную с именем myBoolean типом данных bit. Затем мы установим для переменной значение true и посмотрим результаты.

declare @myBoolean bit
set @myBoolean='true'
select @myBoolean result



Заметьте, что когда мы выбираем это значение, то выводится 1, означающее true.

Аналогично вы можете установить булево значение в false.

declare @myBoolean bit
set @myBoolean='false'
select @myBoolean result



Наоборот, и как лучшая практика, вы можете присваивать числа этой переменной. Следующий пример присвоит переменной myBoolean значение 1, а не true. Это предпочтительный вариант.

declare @myBoolean bit
set @myBoolean=1
select @myBoolean result



Вместо значения false мы присваиваем значение 0.

declare @myBoolean bit
set @myBoolean=0
select @myBoolean result



Резюмируя сказанное, вы можете присваивать битовой переменной значения 0, 1 или использовать ‘TRUE’ и ‘FALSE'.

Наконец, вы можете установить переменную bit в значение NULL, если это необходимо. В следующем примере переменной @myBoolean присваивается значение NULL.

declare @myBoolean bit
set @myBoolean=NULL
select @myBoolean result



Как заменить значения 0, 1 на значения true или false


Как вы уже видели, тип bit показывает 0 и 1 вместо TRUE и FALSE. Как можно заменить значения 0 и 1 на TRUE и FALSE?

Следующий пример демонстрирует как это сделать. Мы будем использовать оператор CASE для замены значений. Вот этот пример.

declare @myBoolean bit
set @myBoolean='TRUE'
select
case
WHEN @myBoolean=1 then 'TRUE'
WHEN @myBoolean=0 then 'FALSE'
ELSE NULL
end as result



Код выполняет следующее. Если значение равно 1, то будет возвращаться TRUE. Если значение переменной равно 0, то возвращается FALSE. В противном случае возвращается NULL.

Как создать таблицу со столбцом типа данных bit


В следующем примере создается таблица с именем myBooleanTable и двумя столбцами. Столбец ID имеет тип INTEGER, а столбец ispair - тип данных BIT.

create table myBooleanTable
(
id int,
ispair bit
)

Как вставить данные логического типа


Для вставки данных типа bit вы можете использовать только значения 0, 1 и NULL. Например, ниже мы вставляем данные в ранее созданную таблицу myBooleanTable.

insert into myBooleanTable values
(1,0),
(2,1),
(5,NULL)

Работа с запросами SQL


Следующий пример использует учебную базу данных Adventureworks. Если она у вас не установлена, обратитесь к этой статье относительно ее установки и конфигурирования.

В этом примере мы будем использовать таблицу HumanResource.Employee, которая содержит несколько столбцов типа данных bit. В первом примере мы используем битовый столбец SalariedFlag.

Следующий пример выводит столбцы BusinessEntityID, NationalIDNumber и SalariedFlag, когда SalariedFlag равен 1.

SELECT [BusinessEntityID]
,[NationalIDNumber]
,[SalariedFlag]
FROM [HumanResources].[Employee]
WHERE SalariedFlag =1

Вот результат:



Для получения аналогичной информации для сотрудников, у которых Salariedflag равен false, вы можете поменять значение флага SalariedFlag на false (0).

SELECT [BusinessEntityID]
,[NationalIDNumber]
,[SalariedFlag]
FROM [HumanResources].[Employee]
WHERE SalariedFlag =0

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

SELECT [BusinessEntityID]
,[NationalIDNumber]
,[SalariedFlag]
FROM [HumanResources].[Employee]
WHERE SalariedFlag ='true'

Наконец, мы можем использовать значение NULL в предложении WHERE. Использование NULL несколько отличается от использования значений 0 и 1, поскольку вы должны применять оператор IS вместо равенства.

Следующий пример иллюстрирует это.

SELECT [BusinessEntityID]
,[NationalIDNumber]
,[SalariedFlag]
FROM [HumanResources].[Employee]
WHERE SalariedFlag IS NULL

Преобразование логических значений к другим типам данных


Следующий пример показывает результат сложения числового значения со значением типа bit. Мы объявляем переменную myBoolean, устанавливая ее значение в true, а затем прибавляем 2.

declare @myBoolean bit
set @myBoolean='true'
select @myBoolean+2 result



Итак, в этом примере myBoolean равен 1, а 1+2 равно 3, это означает, что битовое значение неявно преобразуется к числовому.

Если мы попытаемся выполнить конкатенацию (оператор +), то получим ошибку. Следующий пример иллюстрирует эту проблему.

declare @myBoolean bit
set @myBoolean='true'
select 'The value is'+@myBoolean

Сообщение об ошибке гласит:

Типы данных varchar и bit несовместимы в операции сложения.

Лучшим решением этой проблемы является использование оператора CONCAT, который преобразует переменную bit к строке.

declare @myBoolean bit
set @myBoolean=1
select CONCAT ('The value is ',@myBoolean) as result

CONCAT конкатенирует строку с переменной bit, что даст следующий результат:



Как нерекомендуемый вариант, мы можем использовать функцию CONVERT для преобразования переменной bit в строку. Для данного сценария использование CONCAT является лучшим решением. Однако для других сценариев вы, возможно, не сможете использовать CONCAT, и потребуется использовать CONVERT вместо этого.

declare @myBoolean bit
set @myBoolean='true'
select 'The value is'+CONVERT(varchar(1),@myBoolean) as result

Функция CONVERT преобразует тип данных bit переменной @myBoolean в varchar(1), которое уже может конкатенироваться со строкой.

Другим вариантом является использование CAST. CAST подобна CONVERT, мы включаем этот вариант только для того, что вы были знакомы с этим вариантом, который может вам встретиться где-то еще.

declare @myBoolean bit
set @myBoolean='true'
select 'The value is'+CAST(@myBoolean as varchar(1)) as result

Синтаксис CAST несколько отличается от CONVERT. Вы должны указать выражение, а затем тип данных.

Хранимые процедуры с логическими переменными


Хранимые процедуры представляют собой код, который хранится в базе данных и который вы можете вызывать повторно и многократно использовать.

В этом примере мы покажем, как создать хранимую процедуру с переменными типа bit и выполнить её.

Сначала создадим хранимую процедуру с именем salariedFlag, которая выводит LoginID пользователей с salariedFlag, равным true (1) или false (0). В соответствии с переменной @salariedFlag выводиться будут значения, указанные в предложении WHERE. Значения будут извлекаться из таблицы Employee.

create procedure salariedFlag
(
@salariedFlag bit
)
as
select LoginID
from [HumanResources].[Employee]
where salariedFlag = @salariedFlag

Для выполнения хранимой процедуры используется предложение EXEC и указывается значение для переменной (параметра) @salariedFlag.

exec salariedFlag 1

Этот код выполняет salariedFlag, при этом @salaried получает значение 1 (TRUE).

Вот результат, возвращаемый хранимой процедурой:



Эти значения LoginID соответствуют SalariedFlag, равному TRUE. Если мы хотим увидеть LoginID, соответствующие значению FALSE (0), вы можете вызвать эту процедуру с другим значением параметра. Мы можем использовать EXECUTE вместо EXEC. Мы можем также включить в вызов имя параметра (что является лучшим вариантом использования, который легче понять и поддерживать, особенно в случае хранимых процедур с многими параметрами).

execute salariedFlag @salariedFlag='False'

Как видно в этом примере, мы используем команду EXECUTE, а не EXEC, и имя параметра @salariedFlag, в отличие от предыдущего примера. Наконец, мы используем значение, равное строке False, а не значению 0 (не рекомендуется, но работает).

Результат выполнения хранимой процедуры представлен ниже.



Категории: T-SQL

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.