程序从MS SQL移植到ORACLE,面临大面积的SQL语句修改,其中用的最多的莫非isnull,虽然oracle中有nvl ,nullif, is null等函数,但却没有isnull。自己写一个吧,但是因为类似ISNULL(),NVL()的函数入参和返回值的数据类型都并不确定,要如何定义类型?姑且用varchar2吧:请看下面测试代码

--创建isnull函数
create or replace function isnull(i_obj in varchar2, i_obj2 in varchar2)
return varchar2
is
beginreturn 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等。

Oracle中模拟SQL中的isnull函数相关推荐

  1. shell脚本中编写SQL中 以传参(${accdate})的方式 动态:求 前12个月的日期和求 前一周(7天的日期)

    shell脚本中 编写SQL中 以传参(${accdate})的方式 动态 求 前12个月的日期 CAST(CAST(DATE_FORMAT(DATE_SUB(from_unixtime(unix_t ...

  2. Orcale的NVL、NVL2函数和SQL Server的ISNULL函数

    Orcal 的 nvl函数 NVL(Expr1,Expr2)如果Expr1为NULL,返回Expr2的值,否则返回Expr1的值,Expr1,Expr2都为NULL则返回NULLNVL2(Expr1, ...

  3. Oracle在Pl/sql中的存储过程----zhoudianzhang

    Oracle 存储过程 目录 Oracle 存储过程... 1 Oracle存储过程基础知识... 1 Oracle存储过程的基本语法... 2 关于Oracle存储过程的若干问题备忘... 4 1. ...

  4. oracle中nvarchar,SQL中的Nvarchar在oracle中用作varchar2

    我听说过Oracle中的varchar2 emp_name varchar2(10)如果输入的值小于10,则剩余空间将被自动删除 在SQL中我们如何实现这一目标. 通过使用nvarchar,我们可以在 ...

  5. Oracle数据库PL/SQL中执行存储过程

    有时生产线上问题,或者调试需要手动在pl/sql中执行存储过程,但一般不建议这么做(影响线上交易). 一.直接测试执行 在pl/sql中找到对应需要测试的存储过程,左边菜单栏:Procedures下. ...

  6. SQL Server的 isnull 函数

    今天我在敲机房结账的时候遇到一个问题,就是查询汇总金额的时候,比如:查询未结账的总充值金额.我用的是SQL的sum()函数,SQL语句是这么写的: string sql = "select ...

  7. Oracle从零开始04——SQL语句03——单行函数

    5.单行函数 function_name(column|expression,[arg1,arg2,-]) 参数说明:function_name:函数名称 column:数据库列名 expressio ...

  8. Excel 2010 SQL应用064 ISNULL函数

    目录 源数据表 解决方案 ISNULL函数的使用 ISNUMERIC函数 源数据表 姓名 工资额 调整额 蔡妙吟 6020 800 张豪麟 5280   周益民 6750   高美榆 6960   阮 ...

  9. mybatis中的xml中拼接sql中参数与字符串的方法

    场景 mybatis中接口方法对应的xml文件中的方法中,需要使用模糊搜索, 查询以参数开头的记录. 错误的sql拼接: <if test="locationVO != null an ...

最新文章

  1. OU/Group/Group Policy组织单元、组和组策略
  2. linux 内存查看_Linux终端查看最消耗CPU内存的进程
  3. ios键盘弹回时顶上去得页面不会回来
  4. c语言学生管理系统write to a text file,语言编程学生成绩管理系统.doc
  5. leetcode题解77-子集
  6. 浅谈对于业务中台的理解
  7. C# visual studio添加NewtonsoftJSON库
  8. SQL中,把SQL查询分析器查询出来的结果,导出到EXCEL表格
  9. multisim仪表运放_Multisim仿真---三运放仪表放大器
  10. 爬虫项目#4567电影网scrapy数据爬取moviePro/持久化储存handReqPro
  11. matlab极坐标图刻度,[转载]如何在Matlab极坐标polar绘图上增加刻度单位
  12. matlab茎叶图命令,[转载]转载:Stata命令(转自人大论坛)
  13. 【论文翻译】Semantic Relation Reasoning for Shot-Stable Few-Shot Object Detection
  14. 严格模式和普通模式之间的区别
  15. 翻转单词顺序(python)
  16. git --暂存区存在的意义
  17. 手机短信验证码的实现
  18. 前端2020面试题195道
  19. 半夜冒着大雨跑网吧写文章是怎样的体验?
  20. 如何修改cef源码支持windows xp

热门文章

  1. 织梦CMS安装分享插件
  2. linux使用ntpdate定时同步时间
  3. 我们是宇宙还是一粒沙?
  4. emui11华为主题破解_余承东:鸿蒙OS手机明年会有!华为开发者大会将发布鸿蒙、HMS和EMUI三大系统升级...
  5. BaiduMap SDK-BusLineSearch(公交路线查询)
  6. Adobe cs4 master注册
  7. 学生用计算机的按键名称,电脑键盘操作方法 电脑键盘各键的名称及使用方法...
  8. scribe日志收集
  9. Matlab论文插图绘制模板第54期—带帷幕的网格曲面图(Meshz)
  10. 前端js——验证码登录(canvas画布),随机生成验证码,判断正确性