今天在做项目的时候要使用CriteriaQuery cq = new CriteriaQuery(class, dataGrid);查询组件,查询视图中“salesName”字段值为空的数据,因为CriteriaQuery做了过滤,如果字段值为空则默认查询出所有的数据,于是在纠结要不要自己手写sql时,想到干嘛不在视图中就判断一下,如果该字段值为空 那么给他赋值另外一个状态呢
于是想起了Oracle中的 ISNULL( check_expression , replacement_value ) 函数:
Oracle 中 ISNULL语法为:若 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value
而MySql 有所不同 :
MySql 里的IFNULL、NULLIF和ISNULL用法
isnull(expr) 的用法:
如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。
mysql> select isnull(1+1);
-> 0
mysql> select isnull(1/0);
-> 1
ifnull(expr1,expr2)的用法:
假如expr1 不为 null,则 ifnull() 的返回值为 expr1,否则其返回值为 expr2。
mysql> SELECT IFNULL(1,0);
-> 1
mysql> SELECT IFNULL(NULL,10);
-> 10
mysql> SELECT IFNULL(1/0,10);
-> 10
mysql> SELECT
IFNULL(1/0,'yes');
-> 'yes'
ifnull(expr1,expr2)的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、 REAL或 INTEGER。假设一个基于表达式的表的情况, 或MySQL必须在内存储器中储存一个临时表中IFNULL()的返回值:
CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;
在这个例子中,测试列的类型为 CHAR(4)。
nullif(expr1,expr2) 的用法:
如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1。这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。
mysql> SELECT
NULLIF(1,1);
-> NULL
mysql> SELECT NULLIF(1,2);
-> 1