首页 Soft PlugIn RAN乱 Dev开发 Info资料 English WAP 留言 登陆 注册
-
Posted by Yippee | 评论(0) | 引用(0) | 阅读69次
20080422 sql null 排序

20080422 sql null 排序
http://www.shengfang.org


select   *   from   table   where   age   >=   10   or   age   <   10 
  我们知道,当age为null时,上面的sql语句并不能查处那一行,因为null和10比较结果为unkonwn, 
  如果直接比较的结果是unknown,又如何排序呢? 
  --------------------------------------------- 
  
  改成這樣: 
  select   *   from   table   where   isnull(age,0)   >=   10   or   isnull(age,0)   <   10  

  建议用这条语句:select   *   from   table   where   age>=   10   or   isnull(age,0)   <   10 
  或则是select   *   from   table   where   age>=   10   or   (case   when   age   is   null   then   1   else   0   end   )   <   10 
  order   by   (case   when   age   is   null   then   0   end),age 
  
  呵呵,select   *   from   table   取说有的数据,不管排序与否,显示所有 
  
  select   *   from   table   where   age>=   10   or   age   <   10,筛选的时候由于null数值,不能判断被排除了,所以没有被显示出来

  怎样让NULL正序排序排到最后

TABLE
使用SELECT   *FROM   TABLE   ORDER   BY   ID   不使用DESC   得到结果:

ID       NUM1     NUM2
1         10       20
2         20       30
3         30       40
NULL   40       50

10 回复次数:8

第1个回答
order   by   (case   when     id   is   null   then   9000   else   id))

空值 
  空   (NULL)   值表示数值未知。空值不同于空白或零值。没有两个相等的空值。比较两个空值或将空值与任何其它数值相比均返回未知,这是因为每个空值均为未知。 
  
 空值通常表示未知、不可用或将在以后添加的数据。例如,客户的中间名首字母在客户下定单时可能不知道。 
  
  下面是有关空值的一些信息:   
  
  若要测试查询中的空值,请在   WHERE   子句中使用   IS   NULL   或   IS   NOT   NULL。 
  
  
  在   SQL   查询分析器中查看查询结果时,空值在结果集内显示为   (null)。 
  
  
  可通过以下方法在列中插入空值:在   INSERT   或   UPDATE   语句中显式声明   NULL,或不使此列进入   INSERT   语句,或使用   ALTER   TABLE   语句在现有表中新添一列。 
  
  
  不能将空值用于区分表中两行所需的信息(例如,外键或主键)。   
  在程序代码中,可以检查空值以便只在具有有效(或非空)数据的行上进行某些计算。例如,报表可以只打印社会安全列中数据不为空的列。执行计算时消除空值很重要,因为如果包含空值列,某些计算(如平均值)会不准确。 
  
  如果数据中可能包含空值,创建查询或数据修改语句消除空值或将空值转换成其它值是一个好办法(如果不想在数据中出现空值)。 
  
  
  
 重要     为了减少对已有查询或报表的维护和可能的影响,建议尽量少使用空值。对查询和数据修改语句进行规划,使空值的影响降到最小。 
  
  
  如果数据出现空值,则逻辑运算符和比较运算符有可能返回   TRUE   或   FALSE   以外的第三种结果   UNKNOWN。需要三值逻辑是导致许多应用程序出错之源。下面这些表概括了引入空值比较的效果。 
  
  下表显示将   AND   运算符应用到两个布尔操作数的结果。 
  
  AND   TRUE   UNKNOWN   FALSE   
  TRUE   TRUE   UNKNOWN   FALSE   
  UNKNOWN   UNKNOWN   UNKNOWN   FALSE   
  FALSE   FALSE   FALSE   FALSE   
  
  
  下表显示将   OR   运算符应用到两个布尔操作数的结果。 
  
  OR   TRUE   UNKNOWN   FALSE   
  TRUE   TRUE   TRUE   TRUE   
  UNKNOWN   TRUE   UNKNOWN   UNKNOWN   
  FALSE   TRUE   UNKNOWN   FALSE   
  
  
  下表显示   NOT   运算符求反或反转方式,以及布尔运算符的结果。 
  
  应用了   NOT   运算符的布尔表达式   取值为   
  TRUE   FALSE   
  UNKNOWN   UNKNOWN   
  FALSE   TRUE   
  
  
 SQL-92   标准引入了关键字   IS   NULL   和   IS   NOT   NULL   来测试空值。 
  
  应用了   IS   NULL   运算符的布尔表达式   取值为   应用了   IS   NOT   NULL   运算符的布尔表达式   取值为   
  TRUE   FALSE   TRUE   TRUE   
  NULL   TRUE   NULL   FALSE   
  FALSE   FALSE   FALSE   TRUE   
  
  
  Transact-SQL   还提供扩展空值处理。如果   ANSI_NULLS   选项设为关,则空值之间的比较(如   NULL   =   NULL)等于   TRUE。空值与任何其它数据类型之间的比较等于   FALSE。  


字体:

Permanant URI永久地址 http://www.shengfang.org/blog/p/20080422sqlnullsort.php
Trackback URI引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1231817601

2009年1月13日11:33星期二  [Dev开发] 追踪此文的RSS
提示:
此文还没有评论。

称呼:    登陆   注册
   不注册,但记住我的信息
邮件:
(非必须)
评论: [UBB代码帮助]
粗体 斜体 下划线 链接 水平线 引用



验证码: 请输入你看见的数字
关闭UBB      提交时自动将内容复制到剪贴板

公告
Fire and Motion!

统计信息
[Yippee]||[统计]||日志:1790
在线: 5||用户: 2562 [列表]
今日:6||到访:2669505
Rss:837701||评论:1584

最新日志

最新评论

友情链接

日历

最新引用

搜索

归档

杂项
Get RSS Feed (Version 2.0)
Get Atom Feed (Version 0.3)
编码:  UTF-8