SQL BOOLEAN (BIT)运算符
布尔型(Boolean)是一种通用的数据类型,用于存储真或假的值。它在我们在表的某一列中定义变量时使用。
例如,一个客户想要获取所有 “红色” 的汽车清单。因此,我们可以使用布尔型运算符如下表所示来找到这些汽车-
在这里,“IS_RED”是一个BOOLEAN列,根据车辆的颜色返回TRUE或FALSE值。
SQL中的布尔类型
SQL没有布尔数据类型(作为关键字)。相反,它提供了BIT数据类型。BIT数据类型是接受值0、1和NULL的整数值。
- 值0表示FALSE,值1表示TRUE。
-
我们还可以使用bit数据类型存储NULL值。
-
BIT数据类型的范围是1到64。这意味着SQL BOOLEAN仅需要一个比特位来存储值。
像PostgreSQL和PL/SQL这样的数据库提供了布尔数据类型,缩写为BOOL。而像MySQL和Oracle SQL这样的数据库没有布尔数据类型。为了表示布尔值,它们分别提供了TINYINT和BIT数据类型。
语法
以下是SQL BIT数据类型的基本语法-
CREATE TABLE table_name (
column name BIT, column2 datatype, column 3 datatype …
);
示例
在以下查询中,我们正在创建一个名为“CUSTOMERS”的表,其中包含三列,分别是“ID”,“NAME”和“AVAILABLITY”。
“AVAILABILITY”列表示客户是否可用。如果客户不可用,则存储位值0(FALSE),如果客户可用,则存储位值1(TRUE)。
CREATE TABLE CUSTOMERS(
ID INT NOT NULL,
NAME VARCHAR(150),
AVAILABILITY BIT
);
结果
执行上述查询的结果如下 –
Commands completed successfully.
验证
可以通过使用SELECT语句检索表的内容来验证更改是否反映在表中。以下是显示Customers表中记录的查询语句-
select * from customers;
表格显示如下-
+-----+------+--------------+
| ID | NAME | AVAILABILITY |
+-----+------+--------------+
使用SQL BIT数据类型插入数据
一旦您创建了一个具有布尔数据类型的表列,您需要将0、1或NULL作为值传递给它。如果具有BIT数据类型的列的值不是这3个值之一,则会生成错误。
示例
在下面的查询中,我们尝试向上面创建的CUSTOMERS表中插入数据-
INSERT INTO CUSTOMERS(ID, NAME, AVAILABILITY) VALUES (1, 'Ramesh', 0);
INSERT INTO CUSTOMERS(ID, NAME, AVAILABILITY) VALUES (2, 'Khilan', 1);
INSERT INTO CUSTOMERS(ID, NAME, AVAILABILITY) VALUES (4, 'Kaushik', NULL);
输出
以下是所获得的结果−
(1 row affected)
(1 row affected)
(1 row affected)
验证
SELECT语句用于打印指定表格的内容。为了验证更改是否在CUSTOMERS表格中反映出来,我们可以使用以下语句进行验证:
SELECT ID, NAME, AVAILABILITY
FROM CUSTOMERS;
表格显示如下 –
+-----+----------+--------------------+
| ID | NAME | AVAILABILITY |
+-----+----------+--------------------+
| 1 | Ramesh | 0 |
| 2 | Khilan | 1 |
| 4 | kaushik | NULL |
+-----+----------+--------------------+
将BIT 0,1替换为TRUE和FALSE
如上所述,BIT数据类型显示0和1的值,而不是TRUE和FALSE。在SQL中,我们可以使用CASE语句将BIT数据类型转换为TRUE和FALSE。
SQL CASE 语句是一种条件语句,它可以帮助我们根据特定条件做出决策。它评估一组条件,并在满足相应条件时返回结果。
语法
以下是CASE语句的基本语法:
CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
...
ELSE default_value
END
示例
为了更好地理解,让我们考虑包含汽车制造商、类型、传输方式和颜色等详细信息的CARS表,如下所示:
CREATE TABLE CARS (
MANUFACTURER VARCHAR(20) NOT NULL,
TYPE VARCHAR(20) NOT NULL,
TRANSMISSION VARCHAR(20) NOT NULL,
COLOR VARCHAR(20),
IS_RED BIT
);
现在,使用以下INSERT语句将值插入到这个表中−
INSERT INTO CARS VALUES ('Toyota', 'SUV', 'Automatic', 'Red', 1);
INSERT INTO CARS VALUES ('Honda', 'Hatchback', 'Manual', 'Grey', 0);
INSERT INTO CARS VALUES ('Mercedes', 'Sedan', 'Automatic', 'Red', 1);
INSERT INTO CARS VALUES ('Tata', 'Truck', 'Manual', 'Blue', 0);
INSERT INTO CARS VALUES ('Ford', 'Minivan', 'Manual', 'Red', 1);
表将被创建为 –
+--------------+-----------+--------------+-------+--------+
| MANUFACTURER | TYPE | TRANSMISSION | COLOR | IS_RED |
+--------------+-----------+--------------+-------+--------+
| Toyota | SUV | Automatic | Red | 1 |
| Honda | Hatchback | Manual | Grey | 0 |
| Mercedes | Sedan | Automatic | Red | 1 |
| Tata | Truck | Manual | Blue | 0 |
| Ford | Minivan | Manual | Red | 1 |
+--------------+-----------+--------------+-------+--------+
现在,让我们尝试显示CARS表中颜色为红色的所有汽车,用TRUE表示;否则用FALSE表示(布尔值)−
SELECT *,
CASE IS_RED
WHEN 1 THEN 'TRUE'
WHEN 0 THEN 'FALSE'
END AS IS_RED_BOOLEAN
FROM CARS;
输出
以下是产生的结果−
+--------------+-----------+--------------+-------+--------+----------------+
| MANUFACTURER | TYPE | TRANSMISSION | COLOR | IS_RED | IS_RED_BOOLEAN |
+--------------+-----------+--------------+-------+--------+----------------+
| Toyota | SUV | Automatic | Red | 1 | TRUE |
| Honda | Hatchback | Manual | Grey | 0 | FALSE |
| Mercedes | Sedan | Automatic | Red | 1 | TRUE |
| Tata | Truck | Manual | Blue | 0 | FALSE |
| Ford | Minivan | Manual | Red | 1 | TRUE |
+--------------+-----------+--------------+-------+--------+----------------+
使用存储过程的BIT数据类型
我们也可以在SQL Server中的存储过程中使用BIT数据类型。存储过程是一组可以多次执行的SQL语句。
存储过程使用BIT参数来确定是否执行某个动作。在使用位类型值(或任何其他数据类型)之前,我们需要先声明这个类型的变量,然后将其用作参数。
语法
以下是接受BIT参数的存储过程的基本语法 –
CREATE PROCEDURE my_Procedure
@myBit BIT
AS
BEGIN
IF @myBit = 1
BEGIN
-- do something if @myBit is true
END
ELSE
BEGIN
-- do something if @myBit is false
END
END
在这里,存储过程接受一个名为 @myBit 的BIT类型参数。然后,它使用IF语句验证 @myBit 的值,并根据其是真还是假执行不同的操作。
示例
在以下查询中,我们尝试创建一个名为 REDFlag 的存储过程,根据 @REDFlag 变量的值获取CARS表的详细信息。
create procedure REDFlag
(
@REDFlag bit
)
as
select * from CARS
where IS_RED = @REDFlag
输出
在执行上述查询时,我们得到以下输出结果:
Commands completed successfully.
验证
创建存储过程成功后,我们需要使用Exec子句来执行它。由于它期望一个类型为BIT的输入值,我们传递了1(对于color = RED为TRUE)。
exec REDFlag 1
输出
执行上述查询后,我们得到以下输出。它显示了红色汽车的列表。
+--------------+-----------+--------------+-------+--------+
| MANUFACTURER | TYPE | TRANSMISSION | COLOR | IS_RED |
+--------------+-----------+--------------+-------+--------+
| Toyota | SUV | Automatic | Red | 1 |
| Mercedes | Sedan | Automatic | Red | 1 |
| Ford | Minivan | Manual | Red | 1 |
+--------------+-----------+--------------+-------+--------+
验证
如果我们需要获取颜色不是红色的汽车列表,我们只需要调用上面创建的过程,并通过传递0来实现-
exec REDFlag 0
输出
以下是产生的结果−
+--------------+-----------+--------------+-------+--------+
| MANUFACTURER | TYPE | TRANSMISSION | COLOR | IS_RED |
+--------------+-----------+--------------+-------+--------+
| Honda | Hatchback | Manual | Grey | 0 |
| Tata | Truck | Manual | Blue | 0 |
+--------------+-----------+--------------+-------+--------+