Oracle数据库order by排序之null值处理方法
来源:互联网 发布:手机淘宝在那取消退款 编辑:程序博客网 时间:2024/05/22 03:32
Oracle数据库order by排序之null值处理方法
最近在忙活公司产品后台的数据报表,在对业务数据排序时候,发现有些字段的记录是null值,这时排序便出现了有违我们使用习惯的数据大小顺序问题。在Oracle中规定,在Order by排序时缺省认为null是最大值,所以如果是ASC升序则被排在最后,而DESC降序则排在最前。所以,为何分析数据的直观性方便性,我们需要对null的记录值进行相应处理。
这是四种oracle排序中NULL值处理的方法:
1、使用nvl函数
语法:Nvl(expr1, expr2)
若EXPR1是NULL,則返回EXPR2,否則返回EXPR1.
SELECT NAME,NVL(TO_CHAR(COMM),'NOT APPLICATION') FROM TABLE1;
nvl函数可以在输入参数为空时转换为一特定值,如
nvl(person_name,“未知”)表示若person_name字段值为空时返回“未知”,如不为空则返回person_name的字段值。
通过这个函数可以定制null的排序位置。
2、使用decode函数
decode函数比nvl函数更强大,同样它也可以将输入参数为空时转换为一特定值,如
decode(person_name,null,“未知”, person_name)表示当person_name为空时返回“未知”,如不为空则返回person_name的字段值。
通过此函数也可以定制null的排序位置。
这是四种oracle排序中NULL值处理的方法:
1、使用nvl函数
语法:Nvl(expr1, expr2)
若EXPR1是NULL,則返回EXPR2,否則返回EXPR1.
SELECT NAME,NVL(TO_CHAR(COMM),'NOT APPLICATION') FROM TABLE1;
nvl函数可以在输入参数为空时转换为一特定值,如
nvl(person_name,“未知”)表示若person_name字段值为空时返回“未知”,如不为空则返回person_name的字段值。
通过这个函数可以定制null的排序位置。
2、使用decode函数
decode函数比nvl函数更强大,同样它也可以将输入参数为空时转换为一特定值,如
decode(person_name,null,“未知”, person_name)表示当person_name为空时返回“未知”,如不为空则返回person_name的字段值。
通过此函数也可以定制null的排序位置。
3、使用nulls first 或者nulls last 语法,最简单常用的方法。
Nulls first和nulls last是Oracle Order by支持的语法
若Order by 中指定了表达式Nulls first则表示null值的记录将排在最前(不管是asc 还是 desc)
若Order by 中指定了表达式Nulls last则表示null值的记录将排在最后 (不管是asc 还是 desc)
若Order by 中指定了表达式Nulls first则表示null值的记录将排在最前(不管是asc 还是 desc)
若Order by 中指定了表达式Nulls last则表示null值的记录将排在最后 (不管是asc 还是 desc)
使用方法举例如下:
将nulls始终放在最前:
select * from tbl order by field nulls first
将nulls始终放在最前:
select * from tbl order by field nulls first
将nulls始终放在最后:
select * from tbl order by field desc nulls last
select * from tbl order by field desc nulls last
4、使用case 语法
Case语法是Oracle 9i后开始支持的,是一个比较灵活的语法,同样在排序中也可以应用
如:
select *
from students
order by (case person_name
when null then
'未知'
else
person_name
end)
表示在person_name字段值为空时返回’未知’,如果不为空则返回person_name
通过case语法同样可以定制null的排序位置。
Case语法是Oracle 9i后开始支持的,是一个比较灵活的语法,同样在排序中也可以应用
如:
select *
from students
order by (case person_name
when null then
'未知'
else
person_name
end)
表示在person_name字段值为空时返回’未知’,如果不为空则返回person_name
通过case语法同样可以定制null的排序位置。
项目实例:
!defined('PATH_ADMIN') && exit('Forbidden'); class mod_gcdownload { public static function get_gcdownload_datalist($start = 0,$rowsperpage = PAGE_ROWS, $datestart = '',$dateend = '',$ver = '',$coopid = '',$subcoopid = '',$sortfield = '', $sorttype = '', $pid = 123456789, $plat = 'abcdefg'){ $sql = ''; $condition = empty($datestart) ? " WHERE 1=1 " : " WHERE t.statistics_date >= '$datestart' AND t.statistics_date <= '$dateend'"; if($ver) { $condition .= " AND t.edition='$ver'"; } if($coopid) { $condition .= " AND t.suco_coopid=$coopid"; } if($subcoopid) { $condition .= " AND t.suco_subcoopid=$subcoopid"; } if($sortfield && $sorttype){ $condition .= " ORDER BY t.{$sortfield} {$sorttype} NULLS LAST"; }elseif($sortfield){ $condition .= " ORDER BY t.{$sortfield} desc NULLS LAST"; }else{ $condition .= " ORDER BY t.statistics_date desc NULLS LAST"; } $finish = $start + $rowsperpage; $joinsqlcollection = "(SELECT tc.coop_name, tsc.suco_name, tsc.suco_coopid,tsc.suco_subcoopid, s.edition, s.new_user, d.one_user, d.three_user, d.seven_user, s.statistics_date FROM (((pdt_stat_newuser_{$pid}_{$plat} s LEFT JOIN pdt_days_dl_remain_{$pid}_{$plat} d ON s.statistics_date=d.new_date AND s.subcoopid=d.subcoopid AND s.edition=d.edition )LEFT JOIN tbl_subcooperator@JTUSER1.NET@JTINFO tsc ON s.subcoopid=tsc.suco_subcoopid) LEFT JOIN tbl_cooperator@JTUSER1.NET@JTINFO tc ON tsc.suco_coopid=tc.coop_id))"; $sql = "SELECT * FROM (SELECT tb_A.*, ROWNUM AS rn FROM (SELECT t.* FROM $joinsqlcollection t {$condition} ) tb_A WHERE ROWNUM <= {$finish} ) tb_B WHERE tb_B.rn>{$start} "; $countsql = "SELECT COUNT(*) AS totalrows, SUM(t.new_user) AS totalnewusr,SUM(t.one_user) AS totaloneusr,SUM(t.three_user) AS totalthreeusr,SUM(t.seven_user) AS totalsevenusr FROM $joinsqlcollection t {$condition} "; $db = oralceinit(1); $stidquery = $db->query($sql,false); $output = array(); while($row = $db->FetchArray($stidquery, $skip = 0, $maxrows = -1)) { $output['data'][] = array_change_key_case($row,CASE_LOWER); } $count_stidquery = $db->query($countsql,false); $row = $db->FetchArray($count_stidquery, $skip = 0, $maxrows = -1); $output['total']= array_change_key_case($row,CASE_LOWER); //echo "<br />".($sql)."<br />"; return $output; } }
0 0
- Oracle数据库order by排序之null值处理方法
- Oracle数据库order by排序之null值处理方法
- Oracle使用order by排序关于null值处理
- oracle使用order by排序null值如何处理
- oracle order by 处理null值
- oracle order by 处理null值
- Oracle order by 处理NULL值
- oracle order by 处理NULL 值
- Oracle order by 处理NULL值
- oracle order by 处理NULL 值
- order by 处理null值方法
- mysql数据库order by语句 null 处理
- oracle的order by排序中空字符串处理方法
- oracle的order by排序中空字符串处理方法
- oracle 数据库 order by 排序的使用
- 06-Oracle入门之order by排序
- oracle 数据库 order by排序的时候如何控制null列数据是排在前面还是后面
- sql中order by对null值的排序
- 文章标题
- iOS 开发中在导航栏添加多个按钮并改变它的位置
- MFC学习-第2,3课 MFC框架的运行机制
- 【Spring3】(1)初识Spring
- 生成二维码代码
- Oracle数据库order by排序之null值处理方法
- RequireJS Adding a Library
- 设置NavigationControl的字体和背景色
- pushad & pushfd
- NSString 常用方法
- easyui-datetimebox默认显示当前时间
- mac操作系统更新SVN版本与IDEA兼容
- js 标签事件写法
- writeToFile