在Microsoft SQL Server中是否有类似于MySQL的布尔数据types?
在Microsoft SQL Server中是否有类似于MySQL的布尔数据types?
如果是这样,MS SQL Server中的替代方法是什么?
您可以使用BIT
数据types来表示布尔数据。 BIT
字段的值是1,0或null。
您可能想要使用BIT
数据types,可能设置为NOT NULL
:
引用MSDN文章 :
(Transact-SQL)
一个整数数据types,可以取值为1,0或NULL。
SQL Server数据库引擎优化位列的存储。 如果表中有8个或更less的位列,那么这些列存储为1个字节。 如果有9到16位的列,则这些列存储为2个字节,依此类推。
string值TRUE和FALSE可以转换为位值:TRUE转换为1,FALSE转换为0。
你正在寻找bit
。 它存储1或0(或NULL
)。
或者,您可以使用string'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使用三个有价值的逻辑( true
, false
和NULL
),因为NULL
是bit
数据types的可能值。 这里是相关的真值表 –
更多关于三重逻辑的信息 –
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/
SQL Server中有布尔数据types。 它的值可以是TRUE
, FALSE
或UNKNOWN
。 但是,布尔数据types只是包含比较运算符 (例如=
, <>
, <
, >=
)或逻辑运算符 (例如AND
, OR
, IN
, EXISTS
)的某些组合的布尔expression式的结果。 布尔expression式只能在包括WHERE
子句, HAVING
子句, CASE
expression式的WHEN
子句或IF
或WHILE
stream控制语句的谓词的less数几个位置中使用。
对于所有其他用法,包括表中列的数据types,不允许使用布尔值。 对于其他用途, BIT
数据types是首选。 它的行为就像一个缩小的INTEGER
,它只允许值0
和NULL
,除非进一步受到NOT NULL
列约束或CHECK
约束的限制。
要在布尔expression式中使用BIT
列,需要使用比较运算符(如=
, <>
或IS NULL
。 例如
SELECT a.answer_body FROM answers AS a WHERE a.is_accepted = 0;
从格式的angular度来看,一个bit
值通常在客户端软件中显示为0
或1
。 当需要更加用户友好的格式,并且不能在数据库之前的应用层处理时,可以使用CASE
expression式“即时”转换,例如
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)
这样的字符数据types也是可能的,但是这并不明显,存在更多的存储/networking开销,并且需要每个列上的CHECK
约束来限制非法值。
作为参考, answers
表的模式将类似于:
CREATE TABLE answers ( ..., answer_body nvarchar(MAX) NOT NULL, is_accepted bit NOT NULL DEFAULT (0) );
使用Bit
数据types。 在本地T-SQL中处理它时,它的值为1和0
您可以使用SQL Server中的Bit
types来存储布尔数据。
SQL Server使用Bit
数据types
我使用TINYINT(1)
数据types为了在SQL Server中存储布尔值,虽然BIT
是非常有效的