❶ PL sql 查詢結果為空的怎麼排序到最後面
1、只有一個查詢結果的查詢:
select min(to_char(b.arrive_date,'yyyymmdd')||lpad(b.arrive_time,6,0)||c.xs_mc)
into vtmpstr
from tb_evt_bag_mail_rela a, tb_evt_route_bag_rela b, tb_jgjm c
where a.mail_num = vmail_num
。。。。。。
對這個查詢,只需判斷變數vtmpstr是否為空就可以了,即:
if vtmpstr is null then
注意:查詢中用聚合函數才可以這樣用,如果直接取一個值,又沒有結果,則會出錯跳出模塊,跑到例外處理那兒去了,如下面語句:
select city_name into vcity_jdj
from tb_county
where xs_code=substr(vrcv_area,1,4);
如果沒有查詢結果,或者多個查詢結果,都會出錯跑到例外處理那兒,所以應該寫成下面格式:
select min(city_name) into vcity_jdj
from tb_county
where xs_code=substr(vrcv_area,1,4);
2、游標的查詢結果:
open cur_get_trans(vin_date,vmail_num);
loop
fetch cur_get_trans
into vdeal_date,vdeal_time,vdeal_org_code,vlabel_strip,
vmway_code,vflight_name,vdepart_date,vdepart_time;
--判斷查詢結果
if cur_get_trans%found then
。。。
else
。。。
end if;
或者退出循環處理,即:
open cur_get_trans(vin_date,vmail_num);
loop
fetch cur_get_trans
into vdeal_date,vdeal_time,vdeal_org_code,vlabel_strip,
vmway_code,vflight_name,vdepart_date,vdepart_time;
exit when cur_get_mail%notfound;
--處理有結果的查詢
end loop;
--處理無結果的查詢
--注意,有查詢結果處理完畢也會執行到此處,所以要區分上面是否進行過有結果的處理。
close cur_get_trans;
===================================================================
附:
1、游標相關的4個語句:
declare(聲明)、open(打開)、fetch(取數)、close(關閉)。
2、游標相關的4個屬性:%isopen, %found, %notfound,和 %rowcount
(1)%isopen:布爾型,用於檢測游標是否已經打開。如果游標已經打開,返回true,否則返回false。
(2)%found:布爾型,判斷最近一次執行fetch語句後,是否從緩沖區中提取到數據,返回true,否則返回false。
(3)%notfound:與%found相反。
(4)%rowcount:數值型,返回到目前為止已經從游標緩沖區提取數據的行數。在fetch語句沒有執行之前,該屬性值為0。
使用隱式游標%found屬性,sql%found;
使用顯示游標%found屬性,cur_get_trans%found。
❷ mysql !!!按照某個欄位排序 該欄位為空排到最後邊
挖墳,答案寫法沒有語法、語義的問題,但是寫的不夠精簡,不是正常的order寫法。
指出兩點問題:1)ifnull指成'',再與''比較,可直接寫成 sortnum is null;
2)可以直接用結果為bool表達式進行排序(asc),false(0)在前,true在後。
SQL為:
select *
from table
order by sortnum is null , sortnum
❸ sql排除為空並且排序的命令
|desc]進行排序,nulls last 時,強制null放在最後,不為null的按聲明順序[asc|desc]進行排序
order by colum asc 時,null默認被放在最前,order by colum desc 時,null默認被放在最後,
ORDER BY IF(ISNULL(update_date),0,1) null被強制放在最前,不為null的按聲明順序[asc|desc]進行排序
ORDER BY IF(ISNULL(update_date),1,0) null被強制放在最後,不為null的按聲明順序[asc|desc]進行排序
❹ SQL中升序排序欄位為空值影響排序結果解決方法
在公司開發時使用order by *** asc 進行排序時(***欄位為int類型,主要做一個按照數值越小排名越前得功能),出現了所有***列為NULL值的記錄都排在前面的情況。
解決辦法:在排序欄位名前加上-,然後改為降序排序,這樣子有數值的記錄的排序還是跟原來一樣(負負得正),並且這把***列值為NULL的記錄都排在後面了
❺ sql根據條件排序,表中有兩個欄位,如果兩個欄位都不為空且不是「」的時候 排在前面
select a.zdmc,b.zdmc from 表1,表2 a,表2 b where 表1.Zd1=a.Zddm and 表1.ZD2=b.Zddm
❻ SQL排序,將值為0的排最前,其他的按從大到小排列
order by xx!='0',xx DESC 和 order by (case when xx=0 then 0 else 1 end),xx=0 desc 都可以
❼ SQL里ORDER BY 對查詢的欄位進行排序,欄位為空不想排在最前怎麼辦
ORDER BY picturename ASC WHERE picturename <> '' AND picturename IS NOT NULL
❽ 資料庫表中空欄位如何排序在前面
二樓不對吧。desc是降序排列的,但是現在的問題是為空的欄位是最小的,可是要裝它們排在前面的話就不能這樣寫了。你的排法只會讓為空的欄位排到最後。
❾ sql對空記錄的排序問題
寫兩個SQL語句:
1、返回按ID正序且ID不為空的記錄 where id <> "" order by id asc
2、返回按ID為空的記錄 where id = ""
❿ sql語句 讓一個欄位有值的排在前邊 沒有值的排在後邊 然後按時間排序
select*from表名orderbycasewhenjiage2=0orjiage2isnullthen1else0end,datas