题
我有一个列在我的数据库(一个标志)与型varchar(1)填充Y或NULL(这是它是如何,不在我的控制)。
在SQL服务器,做一个上升以通过查询,NULL是在顶部。应该这种行为是一致的Oracle和DB2?
如果,相反我有一个凝聚在柱,以确保它不是空,在的查询,我可能击中任何业绩的问题(由于表扫描等)?
编辑
查询需要一致通过的所有3个数据库,否则我将不得不处理它在码,因此,我想利用的功能结合
编辑
我选择的人作为回答,因为它处理的两个部分的问题,并给了一个有用的解决方法,但是,谢谢me.yahoo.com/a/P4tXrx 用于链接到 在这里,
解决方案
我知道一个事实,即DB2 Express和DB2(至少到V8)确实的不强>支持NULLS FIRST
子句。
如果你想要一个便携式解决方案,您可能要选择类似:
select * from tbl where fld is null
union all select * from tbl where fld is not null
我觉得工会(至少在DB2,你需要检查等)的结果是保证正确排序。
聚结的会会影响性能,因为你正在运行一个函数的每一行返回。然而,这取决于在数据库中的行数。
您可能不得不采取这样的代码两个查询到两个不同的记录集,然后处理它们才能。
编辑:我刚刚检查了SQL标准,它不能保证有UNION ALL
加入了查询排序;他们可能是相互混合。因此,它看起来像你可能不得不求助于运行两个不同的查询码,如上所述。
其他提示
在SQL Server中,通过查询操作的方式的升序,NULL在顶部排序。如果这种行为对于Oracle和DB2是一致的?
在SQL标准的核心功能没有明确界定为空值的默认排序顺序。随着SQL:2003扩展T611“基本OLAP操作”,空白可前或使用NULLS FIRST或NULLS订单的最后条款BY列表中,分别所有数据值后排序。然而,并非所有的DBMS供应商实现此功能。谁不实现这个功能供应商可能为空在DBMS排序指定不同的治疗方法。
在oracle中你可以这样做:
ORDER BY value NULLS FIRST
或
ORDER BY value NULLS LAST
尝试在SQL服务器