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吧:请看下面测试代码

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    cf1100 F. Ivan and Burgers
    cf 1033 D. Divisors
    LeetCode 17. 电话号码的字母组合
    LeetCode 491. 递增的子序列
    LeetCode 459.重复的子字符串
    LeetCode 504. 七进制数
    LeetCode 3.无重复字符的最长子串
    LeetCode 16.06. 最小差
    LeetCode 77. 组合
    LeetCode 611. 有效三角形个数
  • 原文地址:https://www.cnblogs.com/jijm123/p/13946494.html
Copyright © 2011-2022 走看看