在Microsoft SQL Server中是否存在类似于MySQL的布尔数据类型?

Tin*_*Tin 328 sql-server types boolean

在Microsoft SQL Server中是否存在类似于MySQL的布尔数据类型?

如果是这样,MS SQL Server中的替代方案是什么?

kri*_*ian 448

您可以使用BIT数据类型来表示布尔数据.一个BIT字段的值是1,0或空.

  • 此外,标准做法是将0解释为FALSE,将1解释为TRUE,并且当允许时,Null将被反映为NULL. (51认同)
  • 请注意,`BIT`不等同于布尔值.如果标量函数返回"bit",您仍需要测试它是0还是1.例如,dbo.IsReturnsBit(value)= 1 (15认同)

Dan*_*llo 87

您可能想要使用BIT数据类型,可能设置如下NOT NULL:

引用MSDN文章:

位(Transact-SQL)

一种整数数据类型,可以取值1,0或NULL.

SQL Server数据库引擎优化了位列的存储.如果表中有8位或更少位列,则列存储为1个字节.如果有9到16位列,则列存储为2个字节,依此类推.

字符串值TRUE和FALSE可以转换为位值:TRUE转换为1,FALSE转换为0.


ili*_*ode 48

你正在寻找一个bit.它存储1或0(或NULL).

另外,您也可以使用字符串'true''false'到位的1或0,像所谓

declare @b1 bit = 'false'
print @b1                    --prints 0

declare @b2 bit = 'true'
print @b2                    --prints 1
Run Code Online (Sandbox Code Playgroud)

此外,任何非0值(正或负)都会评估(或在某些情况下转换为)1.

declare @i int = -42
print cast(@i as bit)    --will print 1, because @i is not 0
Run Code Online (Sandbox Code Playgroud)

请注意,SQL Server使用三个值逻辑(true,falseNULL),因为它NULLbit数据类型的可能值.以下是相关的真值表 -

在此输入图像描述

有关三值逻辑的更多信息 -

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/


Mar*_*ney 40

SQL Server中有布尔数据类型.它的值可以是TRUE,FALSEUNKNOWN.然而,布尔数据类型是仅含有的某种组合的布尔表达式的结果比较运算符(例如=,<>,<,>=)或逻辑运算符(例如AND,OR,IN,EXISTS).布尔表达式仅允许在少数几个地方使用,包括WHERE子句,HAVING子句,表达式WHEN子句或者流控制语句的谓词.CASEIFWHILE

对于所有其他用法,包括表中列的数据类型,不允许使用布尔值.对于其他用法,BIT首选数据类型.它的行为类似于缩小INTEGER,只允许值0,1并且NULL,除非进一步限制NOT NULL列约束或CHECK约束.

BIT在布尔表达式中使用列,需要使用比较运算符(如=,<>或)进行比较IS NULL.例如

SELECT
    a.answer_body
FROM answers AS a
WHERE a.is_accepted = 0;
Run Code Online (Sandbox Code Playgroud)

从格式化角度来看,bit值通常显示为客户端软件01在客户端软件中显示.当需要更加用户友好的格式,并且无法在数据库前面的应用程序层处理它时,可以使用CASE表达式"即时"转换它.

SELECT
    a.answer_body,
    CASE a.is_accepted WHEN 1 THEN 'TRUE' ELSE 'FALSE' END AS is_accepted
FROM answers AS a;
Run Code Online (Sandbox Code Playgroud)

将布尔值存储为类似char(1)varchar(5)可能的字符数据类型,但这不太清楚,存储/网络开销更大,并且需要CHECK对每列进行约束以限制非法值.

作为参考,answers表的模式类似于:

CREATE TABLE answers (
    ...,
    answer_body nvarchar(MAX) NOT NULL,
    is_accepted bit NOT NULL DEFAULT (0)
);
Run Code Online (Sandbox Code Playgroud)

  • Bit 确实不是布尔等价物,因为您无法将布尔表达式分配给位列。真正的支持将处理将逻辑运算符直接分配给位字段,EG x = y AND z。我最喜欢你的回答,因为你明确指出了这一点。 (2认同)

Pra*_*ana 7

您可以Bit在SQL Server中使用DataType来存储布尔数据.


Rod*_*man 7

使用Bit数据类型.在本机T-SQL中处理它时,它具有值1和0


Hac*_*ese 6

SQL Server使用Bit数据类型