CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

oracle下为什么select * from test where id<>'' 这句话不好用呢

楼主4043335()2004-04-02 10:50:02 在 Oracle / 基础和管理 提问

我今天突然发现在oralce下字符型字段在where中不能直接和''比较,但是sqlserver下可以,oracle下只能用select   *   from   test   where   id   is   not   null  
  这是怎么回事呢 问题点数:20、回复次数:4Top

1 楼gzh_seagull(不可)回复于 2004-04-02 13:46:30 得分 7

oracle不支持空字符串,输入的空字符串被认为是nullTop

2 楼nedvedlh(shirley)回复于 2004-04-02 16:14:59 得分 2

同意楼上的!  
  Top

3 楼welyngj(无爱)回复于 2004-04-02 16:19:32 得分 3

sqlserver下的null,会被显示为null,跟''是不一样的。Top

4 楼baojianjun(包子)回复于 2004-04-02 21:26:23 得分 8

P   l   u   s中的空值  
  当将版本提高到O   r   a   c   l   e   8   i时,应当特别注意不可避免的“   n   u   l   l”字符。当表中的表列值未  
  知时,就置它为空值(   n   u   l   l   )。在O   r   a   c   l   e   8   i中,含有空值的表列长度为零,   但要注意,今后的版本  
  中不一定是这样。  
  12.16.1   比较操作中的空值问题  
  保存空值数据的唯一办法是使用关键字“   is   null”和“is   not   null”,如下所示:  
  select   count(*)  
  from   mytab  
  where   cola   is   null;  
  select   count(*)  
  from   mytab  
  where   cola   is   not   null;  
  查询语句“select   count(*),count_amt   from   comm   group   by   comm_amt;”返回以下输出结果:  
  COUNT(*)   COMM_AMT  
  -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -   -  
  12   1200  
  7   1700  
  8  
  对于n   u   l   l比较操作,当采用其他结构时很快会遇到麻烦。假设表中的c   o   m   m   _   a   m   t表列包含  
  以下数据:  
  Column   Value   Number   of   Rows  
  N   u   l   l   8  
  1   2   0   0   1   2  
  1   7   0   0   7  
  当执行S   Q   L语句“select   count(*)   from   comm   where   comm_amt<1700;”时,其记数结果为1   2,  
  这个结果来自于c   o   m   m   _   a   m   t表列中包含的非空值1   2   0   0的个数。而值为空的数据行没有被记数。  
  这是因为O   r   a   c   l   e不明白那些为空的c   o   m   m   _   a   m   t表列的值,空没有意义且不确定,所以空的表列值  
  的数据行没有被返回记数。下面将讨论怎样使用空的表列值进行比较操作。  
  12.16.2   使用N   V   L进行空值比较操作  
  n   v   l函数是解决空表列值比较的方法,下面列出了从c   o   m   m表中检索包含空值记数的语句:  
  SQL>select   count(*),nvl(comm_amt,0)   from   comm   group   by   nvl(comm_amt,0);  
  COUNT(*)   NVL   (COMM_AMT,0)  
  -------   ----------------  
  8   0  
  1   2   1   2   0   0  
  7   1   7   0   0  
  n   v   l函数用“   0”值置换c   o   m   m   _   a   m   t表列中值为空的所有数据行,使用这个新功能让我们运  
  行上述查询,检索有多少个c   o   m   m   _   a   m   t表列值小于1   7   0   0的行。  
  SQL>select   count(*)   from   comm   where   nvl   (comm_amt,0)<1700;  
  COUNT   (*)  
  -   -   -   -   -   -   -   -   -  
  2   0  
  下面再来讨论一下字符串空表列值的比较操作的正确与错误的方法。随着处理空表列值  
  能力的提高,将有助于用户更好地理解空值数据。  
  12.16.3   The   NULL=NULL比较的异常情况  
  如果不使用语法“is   null”和“is   not   null”,将带来麻烦,下面的语句对这一点做出了说明:  
   
  SQL>   select   12   from   dual   where   null='';  
   
  沒有任何資料列被選取  
   
  SQL>   select   12   from   dual   where   ''='';  
   
  沒有任何資料列被選取  
   
  SQL>   select   12   from   dual   where   null=null;  
   
  沒有任何資料列被選取  
   
  SQL>   select   12   from   dual   where   null   is   null;  
   
                  12  
  ----------  
                  12  
   
  SQL>   select   12   from   dual   where   nvl(null,'x')=nvl(null,'x');  
   
                  12  
  ----------  
                  12  
   
  O   r   a   c   l   e   8   i这种方法处理空值,许多开发者和数据库管理员有时会有一种受到  
  挫折的感觉。很显然,除了熟悉对空值的约定外别无它法,只有熟练地掌握这方面的  
  知识,才能保证查询结果的正确。Top

相关问题

  • oracle中这句话怎么写?
  • 请问"<xsl:if test="position()>= 0 and position()<= 4>"这句话怎么写??
  • oracle sql语句高手请进,为什么这句话无法执行,好像上了锁,来解一下吧!
  • 这句话那错了?
  • 这句话什么意思?
  • 这句话怎么翻译?
  • 这句话有错吗?!!
  • 这句话有错吗?
  • 这句话什么意思?
  • 这句话如何写??

关键词

  • 数据
  • oracle
  • sql
  • null
  • r a c l e8
  • comm
  • amt
  • nvl
  • 空值
  • 表

得分解答快速导航

  • 帖主:4043335
  • gzh_seagull
  • nedvedlh
  • welyngj
  • baojianjun

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo