oracle 中的null与''

Posted Alex Zeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 中的null与''相关的知识,希望对你有一定的参考价值。

1.先看看Null与‘‘在oracle中的表现

C:\Users\zen>sqlplus hr/hr

SQL*Plus: Release 11.2.0.1.0 Production on Fri Mar 31 10:30:32 2017

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create table test_null(id_ number,name_ varchar2(10));

Table created.

SQL> insert into test_null values(1,oracle);

1 row created.

SQL> insert into test_null values(2,‘‘);

1 row created.

SQL> insert into test_null values(3,null);

1 row created.

SQL> select * from test_null;

       ID_ NAME_
---------- ----------
         1 oracle
         2
         3

SQL> select nvl(name_,It is null) nvl_null,nvl(‘‘,It is empty string) emptystr from test_null;

NVL_NULL   EMPTYSTR
---------- ------------------
oracle     It is empty string
It is null It is empty string
It is null It is empty string

SQL> select * from test_null where name_ is null;

       ID_ NAME_
---------- ----------
         2
         3

SQL> select * from test_null where name_=‘‘;

no rows selected

SQL> select * from test_null where cast(name_ as varchar2(10))=‘‘;

no rows selected

SQL> select * from test_null where cast(name_ as varchar2(10))=cast(‘‘ as varchar2(10));

no rows selected

SQL> select * from test_null where name_<>‘‘;

no rows selected

SQL> select * from test_null where nvl(name_,‘‘)=‘‘;


no rows selected


SQL> select * from test_null where nvl(name_,‘A‘)=‘A‘;


ID_ NAME_
---------- ----------
2
3


SQL>

2.关于以上现象的解释

oracle 将‘‘ 当成了null 处理。每个null都是独一无二的,对null的操作只能是 is null OR is not null,对于null的=<>,>,<的逻辑判断都会得到否。

3.看看null与‘‘在mysql中的表现

C:\Users\zen>mysql -uzen -p
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.24-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type help; or \h for help. Type \c to clear the current input statement.

mysql> use product_test;
Database changed
mysql> drop table test_null;
Query OK, 0 rows affected (0.37 sec)

mysql> create table test_null(id_ int,name_ varchar(127));
Query OK, 0 rows affected (0.59 sec)

mysql> insert into test_null values(1,oracle),(2,‘‘),(3,null);
Query OK, 3 rows affected (0.08 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test_null;
+------+--------+
| id_  | name_  |
+------+--------+
|    1 | oracle |
|    2 |        |
|    3 | NULL   |
+------+--------+
3 rows in set (0.00 sec)

mysql> select * from test_null where name_ is null;
+------+-------+
| id_  | name_ |
+------+-------+
|    3 | NULL  |
+------+-------+
1 row in set (0.06 sec)

mysql> select * from test_null where name_=‘‘;
+------+-------+
| id_  | name_ |
+------+-------+
|    2 |       |
+------+-------+
1 row in set (0.00 sec)

mysql> select * from test_null where name_<>‘‘;
+------+--------+
| id_  | name_  |
+------+--------+
|    1 | oracle |
+------+--------+
1 row in set (0.00 sec)

mysql> select * from test_null where name_ is not null;
+------+--------+
| id_  | name_  |
+------+--------+
|    1 | oracle |
|    2 |        |
+------+--------+
2 rows in set (0.00 sec)

mysql>

4.在mysql中null 就是null,‘‘就是空字符,没有将二者混淆起来。

 

以上是关于oracle 中的null与''的主要内容,如果未能解决你的问题,请参考以下文章

将ORACLE中查询结果为空字符串的变成null该怎么做

oracle中的to_date()函数遇到输入值为NULL时怎么办

错误记录Flutter 编译报错 ( The parameter ‘‘ can‘t have a value of ‘null‘ because of its type, but the im )(代

SQL中空值查询''与null 的区别

oracle存空字符串怎么会变成null

oracle字段为''或者NULL时做比较