我在对客户数据库Oracle 10g抽取数据时,发现有一个字段从PL/SQL Developer里看明明是空的,肯定不是空格,光标能到Gird的最前面,但是执行
Select * From ODS_PAYREF_FEE F Where F.POLICYNO = '288060208192008000004' And F.ENDORSENO = '' 不能查出来
Select * From ODS_PAYREF_FEE F Where F.POLICYNO = '288060208192008000004' And F.ENDORSENO is NULL 也查不出来
Select * From ODS_PAYREF_FEE F Where F.POLICYNO = '288060208192008000004' And TRIM(F.ENDORSENO) = '' 也查不出来
Select * From ODS_PAYREF_FEE F Where F.POLICYNO = '288060208192008000004' And F.ENDORSENO is NOT NULL 却能查出来,
这是为什么,Developer里看明明是空的,哪位大家遇到这类数据了的,帮忙解释下
附数据库相关配置
NLS_LANGUAGE = AMERICAN
NLS_CHARACTERSET = ZHS16GBK
NLS_RDBMS_VERSION = 10.1.0.2.0
ENDORSENO 字段定义为VARCHAR2(30)
做了一下长度测试
Select length(F.ENDORSENO) From ODS_PAYREF_FEE F Where F.POLICYNO = '288060208192008000004'
结果为1
Select * From ODS_PAYREF_FEE F Where F.POLICYNO = '288060208192008000004' And F.ENDORSENO = '' 不能查出来
Select * From ODS_PAYREF_FEE F Where F.POLICYNO = '288060208192008000004' And F.ENDORSENO is NULL 也查不出来
Select * From ODS_PAYREF_FEE F Where F.POLICYNO = '288060208192008000004' And TRIM(F.ENDORSENO) = '' 也查不出来
Select * From ODS_PAYREF_FEE F Where F.POLICYNO = '288060208192008000004' And F.ENDORSENO is NOT NULL 却能查出来,
这是为什么,Developer里看明明是空的,哪位大家遇到这类数据了的,帮忙解释下
附数据库相关配置
NLS_LANGUAGE = AMERICAN
NLS_CHARACTERSET = ZHS16GBK
NLS_RDBMS_VERSION = 10.1.0.2.0
ENDORSENO 字段定义为VARCHAR2(30)
做了一下长度测试
Select length(F.ENDORSENO) From ODS_PAYREF_FEE F Where F.POLICYNO = '288060208192008000004'
结果为1
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
我得出的结果是0,那这样的数据该怎么过滤掉了
在你的sqlplus直接用命令行select 下,看看是什么东东?
Select * From ODS_PAYREF_FEE F Where F.POLICYNO = '288060208192008000004' And F.ENDORSENO = ' '
注意条件后面两个单引号之间有个空格啊
为什么?因为oracle的查询语句 ='' 不加空格的相当于使用 is null,明显你这里不是null。
把条件 TRIM(F.ENDORSENO) = ''
改为
length(TRIM(F.ENDORSENO)) is null
如果能查出来,表示它就是个空字符串。
---
| |select xxx from 表名 where trim(字段)='';
--相当于
select xxx from 表名 where trim(字段)=NULL;
--这样查询自然就查不出结果了。
---
| |select xxx from 表名 where trim(字段)='';
--相当于
select xxx from 表名 where trim(字段)=NULL;
--这样查询自然就查不出结果了。
---
| |select xxx from 表名 where trim(字段)='';
--相当于
select xxx from 表名 where trim(字段)=NULL;
--这样查询自然就查不出结果了。
限制下条件 F.ENDORSENO = ' '
单引号中是有个空格的
VarChar类型 <'' or !=''