• 字段值为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

  • 相关阅读:
    APP案例分析
    第一次作业
    第0次作业
    结对编程-四则运算
    韩剧TV APP案例分析
    四则运算生成器(基于控制台)
    大学
    JAVA异常机制学习
    散列学习
    PAT 甲级1025 PAT Ranking的
  • 原文地址:https://www.cnblogs.com/ZiYangZhou/p/8270623.html
Copyright © 2020-2023  润新知