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

在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

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

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

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

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”,要不然就对不上了。

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

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