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

时间:2010-06-29 05:16:09

标签: sql-server types boolean

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

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

10 个答案:

答案 0 :(得分:416)

您可以使用BIT数据类型来表示布尔数据。 BIT字段的值为1,0或null。

答案 1 :(得分:82)

您可能希望使用BIT数据类型,可能设置为NOT NULL

引用MSDN article

  

位(Transact-SQL)

     

整数数据类型,可以取值1,0或NULL。

     

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

     

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

答案 2 :(得分:43)

您正在寻找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。

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

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

enter image description here

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

Example of three valued logic in 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/

答案 3 :(得分:38)

SQL Server中有布尔数据类型。其值可以是TRUEFALSEUNKNOWN。但是,布尔数据类型只是包含comparison operators的某种组合的布尔表达式的结果(例如=<><>=)或logical operators(例如ANDORINEXISTS)。布尔表达式仅允许在少数几个地方使用,包括WHERE子句,HAVING子句,CASE expressionWHEN子句或IF的谓词或WHILE流量控制声明。

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

要在布尔表达式中使用CHECK列,需要使用比较运算符(例如BIT=<>进行比较。 e.g。

IS NULL

从格式化角度来看,SELECT a.answer_body FROM answers AS a WHERE a.is_accepted = 0; 值通常在客户端软件中显示为bit0。如果需要更加用户友好的格式,并且无法在数据库前面的应用程序层处理它,则可以使用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

答案 4 :(得分:7)

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

答案 5 :(得分:7)

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

答案 6 :(得分:6)

SQL Server使用Bit数据类型

答案 7 :(得分:0)

我使用TINYINT(1)数据类型以便在SQL Server中存储布尔值,尽管BIT非常有效

答案 8 :(得分:0)

您可以使用BIT数据类型。它可以是0、1或null。 如果您特别想要TRUE或FALSE,则可以使用枚举将0和1转换为True和False。并将其作为字符串传递。

答案 9 :(得分:0)

使用BIT数据类型表示布尔数据。 BIT字段的值为1,0或NULL。

create table <tablename> (
    <columnName> bit
)

除非您希望使用三元布尔,否则应添加NOT NULL DEFAULT 0,如下所示:

create table <tablename> (
    <columnName> bit not null default 0
)