微软SQL Server中是否有像MySQL中那样的布尔数据类型?
如果没有,MS SQL Server中的替代方法是什么?
微软SQL Server中是否有像MySQL中那样的布尔数据类型?
如果没有,MS SQL Server中的替代方法是什么?
您可以使用BIT
数据类型来表示布尔数据。一个BIT
字段的值是1、0或null。
BIT
不等同于布尔类型。如果一个标量函数返回一个 BIT
类型的值,仍需要判断它是否为 0 或者 1。例如,dbo.IsReturnsBit(value) = 1。 - Darren Griffith位(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(或在某些情况下转换为1)。
declare @i int = -42
print cast(@i as bit) --will print 1, because @i is not 0
true
、false
和 NULL
),因为 NULL
是 bit
数据类型的可能值。以下是相关的真值表 -
关于三值逻辑的更多信息-
http://www.firstsql.com/idefend3.htm
https://www.simple-talk.com/sql/learn-sql-server/sql-and-the-snare-of-three-valued-logic/
true
和false
不是非零值吗? - MalachiSQL Server中有布尔数据类型。它的值可以是TRUE
, FALSE
或UNKNOWN
。然而,布尔数据类型只是包含一些比较运算符(如=
、<>
、<
、>=
)或逻辑运算符(如AND
、OR
、IN
、EXISTS
)的布尔表达式的结果。布尔表达式仅允许出现在少数几个地方,包括WHERE
子句、HAVING
子句、CASE
表达式的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;
从格式化的角度来看,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
数据类型来存储布尔值数据。SQL Server 使用 Bit
数据类型。
Bit
数据类型。在本地T-SQL中处理它时,它具有值1和0。使用 BIT
数据类型表示布尔数据。一个 BIT
字段的值可以是 1、0 或 NULL。
create table <tablename> (
<columnName> bit
)
create table <tablename> (
<columnName> bit not null default 0
)
我在SQL Server中使用TINYINT(1)
数据类型来存储布尔值,虽然BIT
更有效。
TINYINT(1)
呢? - Caltor
boolean
数据类型。 - user330315