兼容oracle,sqlserver,mysql数据库对null和''(空)的不同处理的解决方法
来源:互联网 发布:怎样锻炼腹肌 知乎 编辑:程序博客网 时间:2024/05/16 09:07
查询中,
可能会遇到的需求是:输出非null和非''的数据
而不同数据库对null和''空的 会有区别对待:
!先说结论:
oracle不区别对待(插入的''会自动转换成null),mysql和sql server区别对待(完全没有关系 ''就是'' ),
oracle:插入的''直接被当做null (连 column_name = '' 与 column_name != '' 查询结果都不对的,因为''(空)即是null)
mysql:插入的null是null,''(空)是‘’(空)
sql server: 插入的null是null,''(空)是‘’(空)
测试表结构如下 :
ab1aaa2''3null!再说兼容的解决方法:
1、需要三个数据库兼容:
可以使用通用的函数nullif(a,b)(如果两个指定的表达式相等,则返回null。)
通过条件: nullif(column_name,'') is not null
三者结果一致:
输出非null和非''的数据:
select * from zivatest where nullif(b,'') is not null
2、兼容oracle和mysql:
可以使用函数length()得到字段长度
通过条件: length(column_name) > 0
结果一致:
输出非null和非''的数据:
select * from zivatest where LENGTH(b) > 0
(sql server函数为len() )
测试表结构如下 :
ab1aaa2''3nullcreate table zivatest (a int,b varchar(10));
insert into zivatest values(1,'aaa');
insert into zivatest values(2,'');
insert into zivatest values(3,null);;
insert into zivatest values(1,'aaa');
insert into zivatest values(2,'');
insert into zivatest values(3,null);;
测试1:
select * from zivatest where b is not null and b <> ''
测试2:
select * from zivatest where b is not null
测试3:
select * from zivatest where b <> ''
下图再次证明:mysql和sqlserver都把存入的''当作‘’ ,和存入的'a' ,'b' 等一样对待:
1 0
- 兼容oracle,sqlserver,mysql数据库对null和''(空)的不同处理的解决方法
- 不同数据库对null值的处理
- MYSQL 对null和空字符串正序排序靠前的解决方法
- mysql sqlserver oracle数据库的关键字处理
- jdbc连接不同的数据库(oracle、sqlserver、mysql)的步骤
- null 和 空字符串的不同
- 关于空值null的排序问题 mysql 和oracle
- mysql 对null的处理
- Oracle空串与null的处理
- 对mysql数据库中字段为空的处理
- 对mysql数据库中字段为空的处理
- Oracle,SQLServer的空值(null)判断及数值转换
- Oracle数据库中对null值的排序及mull与空字符串的区别
- 数据库中NULL与空是不同的
- mysql 分区管理和对NULL的处理
- oracle 的 null 和 空字符串('')
- oracle 的 null 和 空字符串('')
- oracle 的 null 和 空字符串('')
- Spring整合Quartz实现定时任务
- 创建SVN和设置密码以及SVN自动更新
- 安装和使用 IBM WebSphere MQ for Linux
- PHP autoload(自动加载)代码机制详解
- 隐藏单元(二)
- 兼容oracle,sqlserver,mysql数据库对null和''(空)的不同处理的解决方法
- iOS 仿照今日头条 实现的滚动表格 XLSlideSwitch
- 程序员经典电子书下载(超全)
- Android ClassLoader工作原理学习记录(一)
- Java NIO原理 图文分析及代码实现
- Unity断言库
- Unity资源处理机制(Assets/WWW/AssetBundle/...)读取和加载资源方式详解
- 2016 Simulate Exam Of C
- Fragment中ListView和左右滑动冲突的解决