关于oracle条件为空的判断

linghengmao 2013-05-17 03:41:11
我想把某一字段不为空的记录找出来,有以下SQL语句:
select buyDate as 购买日期, IC_number as 会员卡号 from tableName where IC_number is not null

按以上语句,应是会员卡号不为空的记录才会显示出来,但现在显示的结果却夹杂着几条IC_number为空的记录。我已检查为空的那几条记录IC_nubmer列什么也没有,包括' '.
请问各位大虾是什么原因呢?我该如何让那几样为空的也不显示出来?
我用的版本是oracle 10g。
先谢了!
...全文
1747 38 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
sysadm_cc 2013-08-02
  • 打赏
  • 举报
回复
楼主,你就不能加个表前缀啊!用养成使用别名,加表前缀的习惯,不然别人没办法看懂你的代码。
现在 2013-07-26
  • 打赏
  • 举报
回复
我也认为是left join的关系。
shy315 2013-07-26
  • 打赏
  • 举报
回复
引用 6 楼 u010412956 的回复:
无数据无真相。。。
真理啊,话说楼主sql字段的所属表别名都不加,太有歧义了。 逻辑上的分析楼上都说全了,还是不对的话,那就是数据导入有问题,或者表结构字段类型问题。 建议另外建两个模拟测试表,手工加几条数据,试一下。
luckydog321 2013-07-26
  • 打赏
  • 举报
回复
跟left join 有什么关系。。还是感觉特殊字符引起的。。
linghengmao 2013-07-25
  • 打赏
  • 举报
回复
引用 33 楼 qq345386817 的回复:
[quote=引用 30 楼 linghengmao 的回复:] [quote=引用 28 楼 qq345386817 的回复:] 最简单的办法,换成这种查询条件吧: select * from ls_fs a, sys_associator b where a.ls_ic_number = b.ass_number and .......
但是我要把会员卡为空的不显示出来呀。[/quote] 空值是不会等于任何值的。还过滤不掉吗?[/quote] 就是过虑不掉,见我前面的回复。谢谢!
皮特尔 2013-07-07
  • 打赏
  • 举报
回复
引用 30 楼 linghengmao 的回复:
[quote=引用 28 楼 qq345386817 的回复:] 最简单的办法,换成这种查询条件吧: select * from ls_fs a, sys_associator b where a.ls_ic_number = b.ass_number and .......
但是我要把会员卡为空的不显示出来呀。[/quote] 空值是不会等于任何值的。还过滤不掉吗?
哈特比尔波 2013-07-07
  • 打赏
  • 举报
回复
楼主请去掉双恒杠。就可以显示你要的数据了。
shy315 2013-07-06
  • 打赏
  • 举报
回复
估计是字段值中有特殊符号,试试IC_number>=' ',空格是可视字符ascii码最小的
linghengmao 2013-07-06
  • 打赏
  • 举报
回复
引用 28 楼 qq345386817 的回复:
最简单的办法,换成这种查询条件吧: select * from ls_fs a, sys_associator b where a.ls_ic_number = b.ass_number and .......
但是我要把会员卡为空的不显示出来呀。
皮特尔 2013-06-22
  • 打赏
  • 举报
回复
最简单的办法,换成这种查询条件吧: select * from ls_fs a, sys_associator b where a.ls_ic_number = b.ass_number and .......
皮特尔 2013-06-22
  • 打赏
  • 举报
回复
引用 26 楼 linghengmao 的回复:
[quote=引用 25 楼 qq345386817 的回复:] 楼主,换成 ass_number is not null 试试。 因为left join后,表里面已经没有ls_ic_number列了。
已经用过 is not null了。还是不行。[/quote] LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。 所以,应该添加ass_number is not null 的判断条件。注意,这里是 ass ,不是 ls 了。
linghengmao 2013-06-21
  • 打赏
  • 举报
回复
引用 25 楼 qq345386817 的回复:
楼主,换成 ass_number is not null 试试。 因为left join后,表里面已经没有ls_ic_number列了。
已经用过 is not null了。还是不行。
皮特尔 2013-06-07
  • 打赏
  • 举报
回复
楼主,换成
ass_number is not null
试试。
因为left join后,表里面已经没有ls_ic_number列了。
yuyeyi 2013-06-03
  • 打赏
  • 举报
回复
估计是返回的有回车,换行等字符, 建议存储的时候把这些字符给替换掉。
linghengmao 2013-06-01
  • 打赏
  • 举报
回复
引用 22 楼 yinan9 的回复:
用ascii(IC_number) 看下返回如何
-------------------------------------------- 返回也是空的。
yinan9 2013-05-31
  • 打赏
  • 举报
回复
用ascii(IC_number) 看下返回如何
linghengmao 2013-05-31
  • 打赏
  • 举报
回复
如果不使用LEFT JOIN , 单独查其中一个表是不会有记录出来的。郁闷...
iceCache 2013-05-31
  • 打赏
  • 举报
回复
我也感觉会不会跟使用了left join有关
linghengmao 2013-05-31
  • 打赏
  • 举报
回复
引用 18 楼 hanks_gao 的回复:
參考17樓,点开字段的值,看一下是否有回车或换行!!!
select buyDate as 购买日期, IC_number as 会员卡号 from tableName where length(trim(IC_number))>=6
-------------------------------------------- 会不会跟我用 left join 有关呢?见我上面的图。 谢谢!
devid 2013-05-21
  • 打赏
  • 举报
回复
引用 2 楼 linghengmao 的回复:
[quote=引用 1 楼 zzgzzg00 的回复:] trim一下试试
select buyDate as 购买日期, IC_number as 会员卡号 from tableName where (IC_number is not null) and (trim(IC_number) <> '') 则没有找到任何一条记录。[/quote] select buyDate as 购买日期, IC_number as 会员卡号 from tableName where trim(IC_number) is not null
加载更多回复(17)

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧