SQL> select ' ' n from dual;
N
--------------------
2,对于null的比较和运算
首先,对于null的比较,必须用is null 或is not null,不能用=和<>,测试如下:
SQL> select 1 from dual where ''=null;
no rows selected
SQL> select 1 from dual where null=null;
no rows selected
SQL> select 1 from dual where '' is null
2 ;
1
----------
1
SQL> select 1 from dual where null is null;
1
----------
1
SQL> select 1 from dual where null is '';
select 1 from dual where null is ''
*
ERROR at line 1:
ORA-00908: missing NULL keyword
SQL> select 1 from dual where '' is '';
select 1 from dual where '' is ''
*
ERROR at line 1:
ORA-00908: missing NULL keyword
可以发现,尽管可以
'' is null,却不能 null is '' ,is null 和is not null是整体,这也算是null和空字符串的一个区别吧
对null的任何预算 都是返回null,这是个常识,不多测试了。
SQL> select null-1 from dual;
NULL-1
----------
unknown
SQL> select 1-null from dual;
1-NULL
----------
unknown
3,因为null这个玩意很特殊,所以oracle设计了很多函数来对他进行处理,让他不能太得瑟。常用的有
nvl(expr1,exper2)如果expr1是null,就返回expr2
nvl2(expr1,export,expr3)如果expr1不是null就返回expr2,是null就返回expr3.
nullif(expr1,expr2)判断参数1和参数2是否相等,相等就返回null,不相等就返回参数1,但是nullif的参数类型必须一样,而且参数1不能为null,不然会报错的。同时,如果参数1是null,那么进行类型转换之后,转化为字符串或日期类型的null都不会报错,但是number不行。
对nullif稍微做一下测试
SQL> SELECT NULLIF(1,2) FROM DUAL;
NULLIF(1,2)
-----------
1
SQL> SELECT (1,NULL) FROM DUAL;
SELECT (1,NULL) FROM DUAL
*
ERROR at line 1:
ORA-00907: missing right parenthesis
SQL> SELECT NULLIF(1,NULL) FROM DUAL;
NULLIF(1,NULL)
--------------
1
SQL> SELECT NULLIF(NULL,1) FROM DUAL;
SELECT NULLIF(NULL,1) FROM DUAL
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got CHAR
SQL> select nullif(to_char(null),'1') n from dual;
N
--------------------
unknown
SQL> select nullif(1,'2') from dual;
select nullif(1,'2') from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR
SQL> select nullif(to_date(null),sysdate) from dual;
NULLIF(TO
---------
unknown
SQL> select nullif(to_number(null),1) n from dual;
select nullif(to_number(null),1) n from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got NUMBER
coalesce(expr1,expr2,expr3,......exprn)从左到右返回第一个不是null的参数。但是所有参数必须为同一类型,这个很简单,测试过程就不贴了。