Oracle坑之-空字符串与NULL
空字符串与NULL
首先有如下代码
SELECT *
FROM Pdc_DataDomain DD
INNER JOIN Pdc_DD_Table DDT
ON DD.DataDomainID = DDT.DataDomainID
AND DD.ApplicationDBID = '3e7c6764d73f4c7786c99e5b72eb6912'
AND DDT.TableName <> '#'
AND NOT EXISTS
(SELECT *
FROM pdc_Application_3e7c6764 A
WHERE A.TableName = DDT.TableName
AND A.FieldName = DDT.FieldName
AND A.FieldType = DDT.FieldType
AND nvl(A.FieldLength, '') = nvl(DDT.FieldLength, '')
AND nvl(A.FieldScale, '') = nvl(DDT.FieldScale, ''))
核心重点在这句AND nvl(A.FieldScale, '') = nvl(DDT.FieldScale, '')上,这句当A的FieldScale和DDT的FieldScale都为空的时候,会出现两者nvl后都返回'',但是Oracle的特性是''会被处理为null,而null不等于任何值,包括自己,,那么就over了,如果出现上面这种应该如何处理呢,很简单,转化的时候可以将其转化为一个程序中不会出现的值即可,如果程序逻辑没有不会出现的值,就只有使用isnull来判断了.
以下是参考资料:
-- oracle 将 空字符串即''当成null,测试脚本如下:
select nvl(null,-1) from dual;
sele'','-1') from dual;
select nvl(nvl(null,''),-1) from dual;
select nvl(trim(' '),'-1') from dual;ct nvl(
-- 但是要记住,null 与任何值做逻辑运算得结果都为 false,包括和null本身:
select nvl(max('1'),-1) from dual where null = '';
select nvl(max('1'),-1) from dual where null <> '';
select nvl(max('1'),-1) from dual where null = '-1';
select nvl(max('1'),-1) from dual where null <> '-1';
select nvl(max('1'),-1) from dual where null = null;
select nvl(max('1'),-1) from dual where null <> null;
-- 不过,用 is null 判断时,空字符串和 null 都 is null:
select nvl(max('1'),-1) from dual where '' is null;
select nvl(max('1'),-1) from dual where null is null;
-- 还要记住,null 和任何数值进行数学运算,结果都为 null:
select nvl(null + 0,-1) from dual;
-- 不过,可以使用 || 将空字符串或 null 和字符串连接
select 'a' || null || 'b' from dual;
-- 另,作为以下的 Oracle 内置的函数的参数时,结果也为 null:
select nvl(length(null),-1) from dual;
select nvl(trim(null),-1) from dual;
select nvl(ltrim(null),'-1') from dual;
select nvl(rtrim(null),'-1') from dual;
select nvl(rtrim(null,' '),'-1') from dual;
select nvl(soundex(null),'-1') from dual;
select nvl(SubStr(null,1),-1) from dual;
select nvl(InStr(null,1),-1) from dual;
select nvl(replace(null,'a','b'),'-1') from dual; select nvl(min(null),'-1') from dual;
select nvl(max(null),'-1') from dual;
select nvl(sum(null),'-1') from dual;
select nvl(avg(null),'-1') from dual;
select nvl(sum(null),'-1') from dual;
-- 不过,作为以下的 Oracle 内置的函数的参数时,结果不为null:
select concat('a', null) from dual;
select concat(null, 'a') from dual; select count(null) from dual;
-- 其他函数用的时候,也可以使用以上的方法测试
Oracle坑之-空字符串与NULL的更多相关文章
- postgresql与Oracle:空字符串与null
空字符串:两个单引号,中间无空格等任何内容 在postgresql中,空字符串与null是不同的:而oracle中,空字符串与null等同.测试如下: postgresql中: postgres=# ...
- Java空字符串与null的区别和判断字符串是否为空的方法
Java空字符串与null的区别: 1.类型null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也 ...
- SpringMVC空字符串转为null
空字符串转为null 现在我遇到这样一个需求,那就是我想要吧前端传过来的值变为空,因为所谓前端的校验,其实都不是校验,如果前端传给后台一个表单,可是表单未填入值,我们后台进行判断的时候 既需要判断nu ...
- Java进阶(二十一)java 空字符串与null区别
java 空字符串与null区别 1.类型 null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ; ""表示的是一个空字符串, ...
- Access空字符串和Null值
什么是空字符串和Null值: Microsoft Access可以区分两种类型的空值.因为在某些情况下,字段为空,可能是因为信息目前无法获得,或者字段不适用于某一特定的记录.例如,表中有一个“电话号码 ...
- 3-java中String值为空字符串与null的判断方法
java中String值为空字符串与null的判断方法 2018年01月21日 14:53:45 阅读数:1189 Java空字符串与null的区别 1.类型 null表示的是一个对象的值,而不是一个 ...
- 解决CsvWriter:中文乱码、末尾行多一行空格(/r)、非第一列空字符串""显示null问题
一:主要内容 解决CsvWriter存csv,csv文件打开后中文乱码问题 解决CsvWriter存csv,csv文件最后一行总是多一行空行的问题 解决CsvWriter存csv,csv文件不是第一列 ...
- 空字符串(“”)和null和空格字符串(" ")的区别
1.类型 null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也就是说它的长度为0,但它是一个字符 ...
- vue 之 后端返回空字符串用 null 和 “”以及 undefind 判断不到的问题
原文: <!-- <span v-if="scope.row.buyer_credit_score != '' || scope.row.buyer_credit_score ! ...
随机推荐
- MyBatis3.1 学习教程
昨天中午,突然有想要学习 MyBatis 的冲动,经过 1.5 天的研究和学习,再加上以前学过 I batis 的经验,很快就了解了这门技术. 写这篇教程,是想告诉那些想学却又怕学习不好的同学们, 其 ...
- iOS开发——友盟分享
==========2016-01-29 更新=====刘成利 email:liu_cheng_li@qq.com========== 自己成功集成到公司的项目前,也已做了测试好的友盟分享demo 目 ...
- maven打war包注意之xml、properties文件没打进去解决方法
maven项目在ide中编译出的war包一般不会有很多问题. 但是经过集成环境打war包会出现war包中打不进xml.properties等文件.这样打war包不会报错,但是war包放进tomcat中 ...
- datagrid合并行列--并不能影响序号列内容...(formatter的锅.)
datagrid合并行列 //datagrid组件. $('#id_dailylist_dg').datagrid({ //url:'datagrid_data.json', columns:[[ { ...
- Chrome浏览器报错:Origin null is not allowed by Access-Control-Allow-Origin.
问题:Chrome浏览器报错:Origin null is not allowed by Access-Control-Allow-Origin. 原因:.js文件中使用load()方法,而Chrom ...
- HTML5学习笔记----html5与传统html区别
一. HTML5语法的改变 该知识点所说变化指的是基于HTML4基础上所定义的改变,主要有如下: HTML5的文件扩展符(.html或.htm)与内容类型(text/html)保持不变. HTML5中 ...
- 设置用户sudo -s拥有root权限
开通普通用户的ROOT权限,上线了可以禁止用户使用root权限 修改配置文件 vi etc/sudoers 在 root ALL=(ALL) ALL那么你就在下边再加一条配置:hjd ALL=( ...
- 关于mac上的homebrew
首先它的安装指令并不难: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ ...
- Leetcode 解题 Median of Two sorted arrays
题目:there are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the ...
- 2014年度辛星html教程夏季版第二节
上面一节中我们介绍了HTML文件的书写和几个标签,接下来我们来认识几个其他的标签,这里我们主要介绍一下head标签和文本标签. ***************head标签*************** ...