oracle date資料的條件查詢

碼字猴code_monkey發表於2014-12-03

以前一直使用mysql 現在也要開始學習一下oracle裡面的語法細節了  本文作為學習筆記.


現表A中有一屬性為date的列timeline,此列記錄時間資訊,精確到秒,例如:2008-4-23 8:52:28
現在查詢的需求如下:

1.查詢時間timeline 為 2008-4-01日前的行

2.查詢時間 timeline 在 2008-4-01到2008-04-24之間的行

3.查詢時間 timeline 為2008-04的行

Answer:

           1.select * from A where timeline < to_date('2008-04-01')

2. select * from A where timeline >= to_date('2008-04-01') and timeline <= to_date('2008-04-24') 

3.select * from A where to_char(timeline,'YYYY-MM') = '2008-04'  
   



轉發網上的oracle分頁方式   


1.根據ROWID來分
select * from t_xiaoxi where rowid in(select rid from (select rownum rn,rid from(select rowid rid,cid from

t_xiaoxi  order by cid desc) where rownum<10000) where rn>9980) order by cid desc;
執行時間0.03秒
2.按分析函式來分
select * from (select t.*,row_number() over(order by cid desc) rk from t_xiaoxi t) where rk<10000 and rk>9980;
執行時間1.01秒
3.按ROWNUM來分
select * from(select t.*,rownum rn from(select * from t_xiaoxi order by cid desc) t where rownum<10000) where

rn>9980;執行時間0.1秒
其中t_xiaoxi為表名稱,cid為表的關鍵欄位,取按CID降序排序後的第9981-9999條記錄,t_xiaoxi表有70000多條記錄
個人感覺1的效率最好,3次之,2最差


相關文章