Order by列的某些行为null。如何在该情况下按列排序

时间:2014-03-10 06:20:33

标签: sql postgresql

我有以下选择查询的问题。

select * 
from ".$table2." a,purpose_details b 
where  b.purpose_code=a.purpose and purpose_code in(1,4,6,7,10)  
  and ((fromdt<='$frmdate'and todt>='$frmdate') 
         or (fromdt<='$frmdate' and todt='1111-11-11')) 
  and  substr(a.appno,4,1)!=6  
order by purpose_priority,
         cast(substr(a.case_no,12,4) as int) ,cast(substr(a.case_no,4,1) as int),
         cast(substr(a.case_no,5,7) as int),cast(substr(a.appno,12,4) as int) ,
         cast(substr(a.appno,4,1) as int),cast(substr(a.appno,5,7) as int)";

问题是table2中的行可能有也可能没有appno的值。 (即)某些行的appno值可能为NULL。

由于appno是列中的一个,因此该特定代码返回无效输入错误。

最后我想要的是选择查询仅在appno值不为空时按appno排列列

注意:其余列的order by子句应适用于这两种情况。

请帮我解决一下。在此先感谢。

1 个答案:

答案 0 :(得分:0)

顺序可以定义处理空值但substr不能。 你应该替换你的

Substr (col, ...

使用

Case when col is null then null else substr (col, ...