2 zhang meixia zhang_meixia 于 2015.05.26 10:05 提问

在check中使用case函数,为什么end后面要加 =1

alter table Salary
add CONSTRAINT check__salary CHECK
( CASE WHEN sex = '2' THEN CASE WHEN salary > 1000 THEN 1 ELSE 0 END
ELSE 1 END =1 )
_**_**

为什么上面语句最后结束的时候(end 后面)要加上  “=1”,否则会提示下面的错误信息:
An expression of non-boolean type specified in a context where a condition is expected

6个回答

tongyi55555
tongyi55555   2015.05.26 10:20
已采纳

(CASE WHEN sex = '2' THEN CASE WHEN salary > 1000 THEN 1 ELSE 0 END
ELSE 1 END)=1,楼主这样理解是不是比较好呢?
=1是说明你前面的检验条件会返回一个值,要么成立返回1,要么不成立返回0,然后根据返回值与想要的结果进行比较,=1是你想要的结果,及满足性别女薪水大于10000的条件。

devmiao
devmiao   Ds   Rxr 2015.05.26 10:14

因为这不是一个bool类型,所以还有一个其它情况需要考虑。也就是不等于-不等于1怎么处理

qq_17246605
qq_17246605   2015.05.26 10:20

1.你这个case函数返回的是0和1,不是布尔类型的
2.拿case函数的返回值和1比较,类似于x=1?这样的判断,会返回布尔类型的。
3.如果将case函数改成:
CASE WHEN sex = '2' THEN CASE WHEN salary > 1000 THEN **2 **ELSE 0 END
ELSE 1 END
那么后面就不是加"=1"而是“=2”,要不然就对不上了。

qq_17246605
qq_17246605 回复zhang_meixia: 不客气=。=
2 年多之前 回复
zhang_meixia
zhang_meixia 感谢帮忙,看你的解释 和 tongyi55555 那一抹代码 写的,两个结合来看,我懂了。非常 感谢。
2 年多之前 回复
zhang_meixia
zhang_meixia 感谢帮忙,看你的解释 和 tongyi55555 那一抹代码 写的,两个结合来看,我懂了。非常 感谢。
2 年多之前 回复
Tiger_Zhao
Tiger_Zhao   Rxr 2015.05.26 10:13

SQL 中{0,1}是数值类型,不会自动转换为布尔类型。

wgw335363240
wgw335363240   2015.05.26 10:27

@薇酱 说的对,是这个意思

xiaokangxu
xiaokangxu   2015.05.26 10:40

请注意bool类型和数值类型的区别。

Csdn user default icon
上传中...
上传图片
插入图片