在Microsoft SQL Server中有布尔数据类型吗?
如果不是,在MS SQL Server的替代方案是什么?
在Microsoft SQL Server中有布尔数据类型吗?
如果不是,在MS SQL Server的替代方案是什么?
当前回答
SQL Server中存在布尔数据类型。取值为TRUE、FALSE或UNKNOWN。然而,布尔数据类型只是包含比较运算符(例如=,<>,<,>=)或逻辑运算符(例如AND, or, IN, EXISTS)组合的布尔表达式的结果。布尔表达式只允许出现在少数几个地方,包括CASE表达式的WHERE子句、HAVING子句、WHEN子句或IF或WHILE流控制语句的谓词。
对于所有其他用法,包括表中列的数据类型,不允许使用布尔值。对于其他用途,首选BIT数据类型。它的行为类似于一个缩小的INTEGER,只允许值0、1和NULL,除非进一步限制为NOT NULL列约束或CHECK约束。
要在布尔表达式中使用BIT列,需要使用比较操作符进行比较,例如=,<>或IS NULL。如。
SELECT
a.answer_body
FROM answers AS a
WHERE a.is_accepted = 0;
从格式化的角度来看,位值在客户端软件中通常显示为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约束来限制非法值。
作为参考,答案表的模式类似于:
CREATE TABLE answers (
...,
answer_body nvarchar(MAX) NOT NULL,
is_accepted bit NOT NULL DEFAULT (0)
);
其他回答
我使用TINYINT(1)数据类型,以存储布尔值在SQL Server虽然BIT是非常有效的
你可能想使用BIT数据类型,可能设置为NOT NULL:
引用MSDN文章:
位(transact - sql) 一种整数数据类型,其值可以为1、0或NULL。 SQL Server数据库引擎优化位列的存储。如果一个表中有8个或更少的位列,列存储为1字节。如果有9到16位的列,列存储为2字节,依此类推。 字符串值TRUE和FALSE可以转换为位值:TRUE转换为1,FALSE转换为0。
在SQL Server中可以使用Bit DataType来存储布尔数据。
使用BIT数据类型表示布尔数据。BIT字段的值为1,0或NULL。
create table <tablename> (
<columnName> bit
)
除非你想要一个三路布尔值,你应该像这样添加NOT NULL DEFAULT 0:
create table <tablename> (
<columnName> bit not null default 0
)
SQL Server中存在布尔数据类型。取值为TRUE、FALSE或UNKNOWN。然而,布尔数据类型只是包含比较运算符(例如=,<>,<,>=)或逻辑运算符(例如AND, or, IN, EXISTS)组合的布尔表达式的结果。布尔表达式只允许出现在少数几个地方,包括CASE表达式的WHERE子句、HAVING子句、WHEN子句或IF或WHILE流控制语句的谓词。
对于所有其他用法,包括表中列的数据类型,不允许使用布尔值。对于其他用途,首选BIT数据类型。它的行为类似于一个缩小的INTEGER,只允许值0、1和NULL,除非进一步限制为NOT NULL列约束或CHECK约束。
要在布尔表达式中使用BIT列,需要使用比较操作符进行比较,例如=,<>或IS NULL。如。
SELECT
a.answer_body
FROM answers AS a
WHERE a.is_accepted = 0;
从格式化的角度来看,位值在客户端软件中通常显示为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约束来限制非法值。
作为参考,答案表的模式类似于:
CREATE TABLE answers (
...,
answer_body nvarchar(MAX) NOT NULL,
is_accepted bit NOT NULL DEFAULT (0)
);