zoukankan      html  css  js  c++  java
  • Oracle中模拟SQL中的isnull函数

    程序从MS SQL移植到ORACLE,面临大面积的SQL语句修改,其中用的最多的莫非isnull,虽然oracle中有nvl ,nullif, is null等函数,但却没有isnull。自己写一个吧,但是因为类似ISNULL(),NVL()的函数入参和返回值的数据类型都并不

    --创建isnull函数
    create or replace function isnull(i_obj in varchar2, i_obj2 in varchar2)
    return varchar2
    is
    begin
      return nvl(i_obj, i_obj2);
    end isnull;
     
    --测试建表语句
    CREATE TABLE tUsers(
         UserName VARCHAR2(10),
              AGE NUMBER,
            stime date
     ); 
     
    --插入测试数据 
     INSERT INTO tUsers(UserName,age) VALUES(null,22);
     INSERT INTO tUsers(UserName,age,stime)VALUES('你好123',18,SYSDATE);
     INSERT INTO tUsers(UserName,age) VALUES(null,26);
     INSERT INTO tUsers(UserName,age,stime)VALUES('好123',38,SYSDATE);
     INSERT INTO tUsers(UserName,age) VALUES(null,24);
     INSERT INTO tUsers(UserName,age,stime)VALUES('你123',28,SYSDATE);
     
     --查看建的表结构
     SELECT table_name, column_name, data_type,DATA_LENGTH,COLUMN_ID FROM USER_TAB_COLUMNS WHERE table_name =upper('tusers')
    --查看测试数据
    select * from tUsers
     
     --测试语句
     select * from tUsers where isnull(age,0)=0  --查询所有age字段为null的记录,成功!
     select username,isnull(age,0),stime from tUsers  --如果age字段为Null则返回number型0,成功!
     select username,isnull(age,'未知年纪'),stime from tUsers  --如果age字段为Null则返回VARCHAR型'未知年纪',成功!
     select username,age,isnull(stime,'未知时间') from tUsers  --如果stime字段为Null则返回VARCHAR型'未知时间',成功!
     --如果stime字段为Null则返回VARCHAR型'未知时间',否则返回格式化后的stime, 成功!
     select username,age,case when isnull(stime,' ')=' ' then '未知时间' else to_char(stime,'yyyy-mm-dd hh24:mi:ss') end as sstime from tUsers 
     --如果stime字段为Null则返回VARCHAR型'未知时间',否则返回stime,不成功!
     select username,age,case when isnull(stime,' ')=' ' then '未知时间' else stime end as sstime from tUsers  
     select username,age,nvl(stime,'未知时间') from tUsers  --NVL判断如果stime字段为Null则返回VARCHAR型'未知时间',不成功!
     
    --删除测试表和数据
    DROP TABLE tusers;

    通过测试数据可以看出,自定义isnull函数入参定义为varchar2类型, 基本常用的数据类型都可以实现隐式转换,其中包括varchar,varchar2,nvarchar2,number,date等。

    确定,要如何定义类型?姑且用varchar2吧:请看下面测试代码

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    android中BuildConfig.DEBUG的使用
    Http 状态码完整说明
    Java 线程池
    Gson简要使用笔记
    Android Loader详解四:回调及完整例子
    Android Loader详解三:重启与回调
    Android Loader详解二:使用加载器
    Android Loader详解一:概述
    Metrics介绍和Spring的集成(转)
    Web.xml配置详解之context-param(转)
  • 原文地址:https://www.cnblogs.com/jijm123/p/13946494.html
Copyright © 2011-2022 走看看