首页 > 其他分享 >Oralce用不等于空串判断查询不出任何数据

Oralce用不等于空串判断查询不出任何数据

时间:2024-11-14 09:32:43浏览次数:1  
标签:test1 Oralce 查询 sql NULL id 空串

由一个sql引发的思考:

select * from z_test1 where id <> ''

先说结果:在oracle中啥也查不出来
原因是:oracle中对空串都会视为NULL处理,如上sql等同于

select * from z_test1 where id <> NULL

但是对NULL执行 = <>结果都是false;
对空的处理需要用函数 IS NULL 或者 IS NOT NULL处理

下面详细说下为啥会有这个问题(多数据库sql兼容问题)
1、我有一个表z_test1,表里有id字段,其中id中存在null和空串的数据
为了方便复现问题,建立表并插入数据

create table z_test1( id VARCHAR(36))
insert into z_test1 (id) values (null)
insert into z_test1 (id) values (‘’)
insert into z_test1 (id) values (‘111’)

2、只查询id不为空而且不为空串的数据
3、执行如下sql

select * from z_test1 where id is not null and id <> ''

在pg数据库没有任何问题,只查询出了111的那条数据,没有问题

 

 

但是拿这个sql去Oracle执行发现并没有查询出数据来,这样就有问题了。

 

原因是上述Oralce对空串的处理,结论是为了兼容多数据库最好不要在表中插入NULL又插入空串,最好只插入NULL

4、扩展,各个数据对空串的处理是否和Oracle一样,对此查询了各数据库的结果。
sql还是那个sql,看看是否在不同数据库能否查询出数据。
下面是结果

 
<>‘’ 能否正常过滤结果(Y能/N否)
Oracle N
Mysql Y
SqlServer Y
达梦 Y
瀚高 Y
人大金仓 N
OSCAR Y
Postgrep Sql Y
 

标签:test1,Oralce,查询,sql,NULL,id,空串
From: https://www.cnblogs.com/gXing/p/18545352

相关文章

  • 数据库查询语言(DQL)
    数据库查询语言(DQL)数据库的查询是我们整个数据库学习中的重点内容,面对数据库中庞大的数据,该如何去寻找我们想要的数据,就是我们主要讨论的问题。单表查询单表查询是最简单的一种查询,我们只需要在一张表中去查找数据即可,通过使用语句来进行单表查询:select--指定查询某一列数据......
  • mysql查询表列数
    1.使用DESCRIBE命令:DESCRIBE语句可以返回表的结构信息,包括列名、类型、键等。可以通过查询DESCRIBE的结果集的行数来得到表的列数。DESCRIBEtable_name;2.使用SHOWCOLUMNS命令:SHOWCOLUMNS语句可以显示指定表的列信息,包括列名、类型、键等。可以通过查询SHOWCOLUMNS的结果集的......
  • labview中连接sql server数据库查询语句
    当使用数据库查询功能时,我们需要用到数据库的查询语句,这里已调用sqlserver为例,我们需要按照时间来查询,这里在正常调用数据库查询语句时,我们需要在前面给他加一个限制条件这里用到了,数据库的查询语句。我们以时间为例,我需要查询从开始测试时间,到结束测试时间的数据,这里就用到......
  • 基于SSM高校竞赛和考级查询系统JAVA【毕设源码论文】
      博主介绍:......
  • python-27-Python ORM系列之彻底搞明白ORM概念,对ORM进行封装结合FastAPI实现数据库的
    python-27-PythonORM系列之彻底搞明白ORM概念,对ORM进行封装结合FastAPI实现数据库的增删改查,联表查询等接口一.简介在Python基础系列ORM部分为大家介绍了如何搭建MySQL数据和MySQL一些访问配置,同时也介绍了pymysql库的封装来实现对数据库的增删改查功能,但是截止以上都没......
  • 第六节---高级查询
    高级查询1.聚合函数分组之后的一个阶段存在多个不同的值,那么你就需要使用聚合函数将这些列段的多个值整成一个值,所以就称为聚合函数---(聚合函数就是将一个阶段的不同值合为一个值)count();计算符合条件的行数sum();求和avg();平均值max();最大值min();最......
  • mysql查询
    全列查询使用select*from表名;把表中所有的行和列全部都查询出来  指定列查询select列名,列名from表名; 查询字段为表达式可以边查询边计算,查询的时候把列名构成的表达式,把这一列中的所有行都带入到表达式中进行运算,且操作的数据不会在更改原来的数据select列名......
  • 深入理解RAG查询转换优化:多查询、问题分解与回答回退
    引言在RAG(检索增强生成)系统中,查询转换是影响检索质量的关键环节。本文将深入探讨三种先进的查询转换优化策略:多查询重写、问题分解以及回答回退(Step-Back)。这些策略不仅能显著提升检索准确性,还能有效处理复杂查询场景。多查询重写策略原理与优势多查询重写策略的核心思想是通......
  • RAG检索性能提升实践:混合检索与自查询技术详解
    引言在RAG(检索增强生成)系统中,检索性能直接影响着最终的生成质量。本文将深入探讨两种先进的检索优化技术:混合检索和自查询检索。这些技术能显著提升检索的准确性和灵活性,为RAG系统带来实质性的性能提升。混合检索技术详解混合检索的核心原理混合检索通过集成多种检索算法,充分......
  • 三网话费余额查询API系统源码,可对接TG,可分销,可API对接客户
    本套系统是用thinkphp6.0框架开发的,PHP版本需8.1以上,可查询手机号话费余额、归属地和运营商等信息,系统支持用户中心在线查询和通过API接口对接发起查询,可以对接TG,可以分销,可以单独给代理设置渠道价格,用户余额充值是对接usdt接口或者通过后台生成卡密,源码全开源,支持懂技术的......