我写了这个
select ISNULL((select convert(bit, null) ), -1)
并且预期-1
作为结果,但获得了1
....为什么?由于那一点我猜,但为什么?
如果它是NULL,如何从位字段中获取-1
?
答案 0 :(得分:7)
位只能是0,1和NULL
。
0也是假的,其他一切都是真的。
查看
的结果select ISNULL((select convert(bit, null) ), -1) Returns1;
select ISNULL((select convert(bit, null) ), 1) Returns1;
select ISNULL((select convert(bit, null) ), 100) GuessWhat_Returns1;
select ISNULL((select convert(bit, null) ), 0) Returns0;
最重要的部分
转换为位会将任何非零值提升为1.
答案 1 :(得分:2)
数据类型为bit
的字段只能为0,1或NULL。因此,通过转换为位,您可以将其限制为这三个值中的一个。 ISNULL(cast(BitColumn as int), -1)
会做到这一点。
答案 2 :(得分:1)
答案 3 :(得分:1)
您获得1
的原因与以下内容返回1
:
select cast(-1 as bit)
bit
只包含一位,因此无法代表-1
。选项为0
和1
。在现代计算机上,-1
通常表示为所有1
,因此它变为1
这一事实是有道理的。
答案 4 :(得分:1)
将其转换为int:
select ISNULL(CAST((SELECT CONVERT(bit, NULL) ) AS INT), -1)
答案 5 :(得分:1)
你错了 这里是如何完成的:
select (ISNULL((select convert(bit, null)), -1))-2
开个玩笑!
位只能是0,1和NULL。就像@astander所说的那样 如果你会发现更多的价值观 - 你将成为下一个比尔盖茨
答案 6 :(得分:1)
返回null
select convert(bit, null)
这些都返回1
select convert(bit, -1)
select convert(bit, 2)
select convert(bit, 3)
我怀疑它正在将-1转换为isnull
的一部分但这会引发算术溢出错误
select CONVERT(tinyint, 256)
Astander有答案 转换为位会将任何非零值提升为1 位不一定存储为位。
答案 7 :(得分:0)
select ISNULL(CAST((SELECT CONVERT(bit, NULL) ) AS INT), -1)
这给了你正确的答案。