字段值为null的处理

字段值为null的处理

当字段的值为null我们在查询的时候有些情况可能会报错,这是就需要将null值变成一个指定的数据。有如下的数据,我们需要更具操作日期进行排序,需要先将operatetime转换成日期类型然后进行排序操作,但是由于这个字段的某一些数据为null,转换的时候就会出错。

id name operatedate operatetime
1 ali null null
2 oops 2017-11-12 12:01:12
3 yahoo null null
4 qwerty 2018-01-01 13:01:11
对于上面的数据在oracle中使用如下的sql按operatetime字段进行排序这回报错,
SELECT id,name,TO_DATE(CONCAT(operatedate,CONCAT(' ',operatetime)),'yyyy-mm-dd hh24:mi:ss') optime FROM OPERATE ORDER BY optime DESC;

修改之即可正确运行

SELECT id,name,TO_DATE(CONCAT(nvl(operatedate,'1900-01-01'),CONCAT(' ',nvl(operatetime,'00:00:00'))),'yyyy-mm-dd hh24:mi:ss') optime FROM OPERATE ORDER BY optime DESC;

oracle

NVL(expr1,expr2)

如果expr1为null,返回expr2,如果expr1和expr2的类型不同就会进行隐式的类型转换,将expr2如果不能够隐式地转换成expr的类型会报错;如果expr1不为null,返回expr1。

NVL2 ( expr1 , expr2 , expr3 )

当expr1为null返回expr2,否则返回expr3,同样也会发生隐式的数据类型转换。

sql server

ISNULL ( check_expression , replacement_value )

当check_expression为null的时候返回replacement_value,其中replacement_value的值必须能够隐式的转换成check_expression的类型。

mysql

IFNULL(expr1,expr2)

当expr1不为null时返回expr2,否则返回expr1。

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'

case when then else end用法实现

select id,name, (case when  operatedate is  null then '1900-01-01' else operatedate  end) op  from OPERATE;

如果operatedate字段为null则operatedate的值为1900-01-01,否则为operatedate的原始值。

参考

1.Oracle® DatabaseSQL Language Reference11g Release 2 (11.2)
2.https://docs.microsoft.com/en-us/sql/t-sql/functions/isnull-transact-sql

原文地址:https://www.cnblogs.com/ZiYangZhou/p/8270623.html