巧用trunc函式,獲取某日期範圍內的資料
先看trunc函式日期的用法:
select trunc(sysdate) from dual; --2014/3/5 今天的日期為2011-3-18
select trunc(sysdate, 'mm') from dual; --2014/3/1 返回當月第一天.
select trunc(sysdate, 'yy') from dual; --2014/1/1 返回當年第一天
select trunc(sysdate, 'dd') from dual; --2014/3/5 返回當前年月日
select trunc(sysdate, 'yyyy') from dual; --2014/1/1 返回當年第一天
select trunc(sysdate, 'd') from dual; --2014/3/2 (星期天)返回當前星期的第一天
select trunc(sysdate, 'hh') from dual; --2014/3/5 10:00:00 當前時間為14:41
select trunc(sysdate, 'mi') from dual; --2014/3/5 10:57:00。
例:表t1有如下資料
SQL> select *from t1 ;
YYYYMMDD NAME
---------- --------
20140201 LIU
20140205 YANG
20140227 MA
20140228 Li
20140301 WU
20140302 WANG
20140303 DONG
需求:根據入參yyyymmdd日期欄位做查詢判斷,若yyyymmdd為當月的前三天(即dd<3)則查詢上月至當天的資料,否則查詢當月的所有資料。
求解程式碼如下:
SQL> with t1 as (select to_date('20140201','yyyymmdd') yyyymmdd, 'LIU' name from dual
2 union select to_date('20140205','yyyymmdd') yyyymmdd, 'YANG' name from dual
3 union select to_date('20140227','yyyymmdd') yyyymmdd, 'MA' name from dual
4 union select to_date('20140228','yyyymmdd') yyyymmdd, 'LI' name from dual
5 union select to_date('20140301','yyyymmdd') yyyymmdd, 'WU' name from dual
6 union select to_date('20140302','yyyymmdd') yyyymmdd, 'WANG' name from dual
7 union select to_date('20140303','yyyymmdd') yyyymmdd, 'DONG' name from dual
8 )
9 select * from t1 where yyyymmdd between case when to_char(&&v_date,'dd')
10 trunc(add_months(&v_date,-1),'mm') else trunc(&v_date,'mm') end
11 and case when to_char(&v_date,'dd')
12 else trunc(last_day(&v_date),'dd') end
13 /
輸入 v_date 的值: sysdate
原值 9: select * from t1 where yyyymmdd between case when to_char(&&v_date,'dd')
新值 9: select * from t1 where yyyymmdd between case when to_char(sysdate,'dd')
原值 10: trunc(add_months(&v_date,-1),'mm') else trunc(&v_date,'mm') end
新值 10: trunc(add_months(sysdate,-1),'mm') else trunc(sysdate,'mm') end
原值 11: and case when to_char(&v_date,'dd')
新值 11: and case when to_char(sysdate,'dd')
原值 12: else trunc(last_day(&v_date),'dd') end
新值 12: else trunc(last_day(sysdate),'dd') end
YYYYMMDD NAME
-------------- ----
01-3月 -14 WU
02-3月 -14 WANG
03-3月 -14 DONG
附 trunc函式數字用法如下:
select trunc(123.458) from dual; --123
select trunc(123.458, 0) from dual; --123
select trunc(123.458, 1) from dual; --123.4
select trunc(123.458, -1) from dual; --120
select trunc(123.458, -4) from dual; --0
select trunc(123.458, 4) from dual; --123.458
select trunc(123) from dual; --123
select trunc(123, 1) from dual; --123
select trunc(123, -1) from dual; --120
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21251711/viewspace-1102673/,如需轉載,請註明出處,否則將追究法律責任。
請登入後發表評論
登入
全部評論
相關文章
- 使用 Carbon 獲取指定時間範圍內的日期陣列陣列
- C語言——使用函式輸出指定範圍內的Fibonacci數C語言函式
- Js之設定日期時間 判斷日期是否在範圍內JS
- java判斷集合是否包含某個範圍內的值Java
- 【Oracle SQL】months_between與trunc函式OracleSQL函式
- 關於 Date 函式獲取各類時間/日期/天數函式
- 6-1 使用函式輸出指定範圍內Fibonacci數的個數函式
- 6-3 使用函式輸出指定範圍內的完數 (20分)函式
- 巧用PHP函式或常量快速獲取PHP版本號、最大檔名長度PHP函式
- 生成某個範圍的隨機數隨機
- 智慧手環圍欄資料API獲取API
- Oracle日期時間範圍查詢Oracle
- matlab 從某個範圍內隨機取出一個整數Matlab隨機
- MySQL-日期和資料處理函式MySql函式
- 資料型別範圍資料型別
- int/double資料範圍
- 巧用python“int”函式Python函式
- 獲取中文日期
- js獲取日期JS
- 列舉範圍內的字串字串
- JS判定一個給定的時間在某個時間範圍內JS
- Django筆記二十五之資料庫函式之日期函式Django筆記資料庫函式
- Android Camera2獲取預覽尺寸和fps範圍Android
- PostgreSQL 函式獲取表DDLSQL函式
- 巧用 PHP 陣列函式PHP陣列函式
- mysql 獲取當前日期函式及時間格式化引數詳解MySql函式
- Haskell 中的日期函式Haskell函式
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- 大資料開發-Hive-常用日期函式&&日期連續題sql套路大資料Hive函式SQL
- PostGIS特殊函式 ☞ 根據BOX3D查詢某一空間範圍內的物件函式3D物件
- SqlServer獲取當前日期SQLServer
- python如何只獲取日期Python
- 地圖下載器 002 根據下載範圍獲取要下載的瓦片資訊地圖
- oracle interval日期函式的bug!Oracle函式
- SPL 的日期時間函式函式
- SQLSERVER日期函式(zt)SQLServer函式
- 三角函式:基礎知識&&Omega範圍問題函式
- C++ 獲取指定的過載函式地址C++函式
- Java併發基礎06. 執行緒範圍內共享資料Java執行緒