oracle 日期查詢SQL語句

1、查詢現在時刻

SQL 代碼複製內容到剪貼板
  1. select sysdate from dual

結果:2010-5-13 10:40:26

2、對日期型轉換成字符串型,使用to_char函數

rameter Explanation
YEAR Year, spelled out
YYYY 4-digit year
YYY
YY
Y
Last 3, 2, or 1 digit(s) of year.
IYY
IY
I
Last 3, 2, or 1 digit(s) of ISO year.
IYYY 4-digit year based on the ISO standard
Q Quarter of year (1, 2, 3, 4; JAN-MAR = 1).
MM Month (01-12; JAN = 01).
MON Abbreviated name of month.
MONTH Name of month, padded with blanks to length of 9 characters.
RM Roman numeral month (I-XII; JAN = I).
WW Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.
W Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.
IW Week of year (1-52 or 1-53) based on the ISO standard.
D Day of week (1-7).
DAY Name of day.
DD Day of month (1-31).
DDD Day of year (1-366).
DY Abbreviated name of day.
J Julian day; the number of days since January 1, 4712 BC.
HH Hour of day (1-12).
HH12 Hour of day (1-12).
HH24 Hour of day (0-23).
MI Minute (0-59).
SS Second (0-59).
SSSSS Seconds past midnight (0-86399).
FF Fractional seconds.
以24小時形式顯示出來
XML/HTML 代碼複製內容到剪貼板
  1. select to_char(sysdate,'yyyymmdd hh24:mi:ss')

結果:20100513 10:40:45

相反的是to_date函數

3、某月的最後一天 用last_day函數

SQL 代碼複製內容到剪貼板
  1. select last_day(sysdate)from dual

 

結果:2010-5-31 10:44:21

4、加法計算 +1即增加一天,如果精確到小時、分鐘、秒則用除法

如:獲得下月第一天時刻:

SQL 代碼複製內容到剪貼板
  1. select last_day(sysdate)+1from dual

再如:獲得一小時後時刻

SQL 代碼複製內容到剪貼板
  1. select sysdate+1/24 from dual

再如:獲得10秒後的時刻

SQL 代碼複製內容到剪貼板
  1. select sysdate+1/24/60/60*10from dual

5、獲得下一星期幾的日期 使用next_day函數

如現在要獲得下個星期一的日期:

SQL 代碼複製內容到剪貼板
  1. select next_day(sysdate,2)from dual

注意這裏是2,爲什麼是2?因爲這裏有效的值是1-7,而1表示星期日,2表示星期一……以此類推到星期六。

6、獲得某年、某月的第一天,或者某天的0點整時刻 使用trunc函數

SQL 代碼複製內容到剪貼板
  1. select TRUNC(sysdate,'YYYY')from dual

結果:2010-01-01

SQL 代碼複製內容到剪貼板
  1. select TRUNC(sysdate,'MM')from dual

結果:2010-05-01

SQL 代碼複製內容到剪貼板
  1. select TRUNC(sysdate) from dual

結果:2010-05-13 (今天)

SQL 代碼複製內容到剪貼板
  1. select TRUNC(sysdate,'HH')from dual

結果:2010-05-13 10:00:00 (現在是10點多)

7、使用add_months可以以當前日期爲基準查詢上幾月、下幾月的日期

SQL 代碼複製內容到剪貼板
  1. select add_months(sysdate,-1)from dual

負數表示查詢上n月

如果要查上一年,則是-12,並沒有單獨的add_years函數!

再想:如果要查上一週,有沒有特殊函數可提供?沒有,一週就是7天嘛,所以查詢語句爲:

SQL 代碼複製內容到剪貼板
  1. select sysdate-7 from dual

-----------------------------------------------------------分割線------------------------------------------------------------------

select   *   from   mytable   where   to_char(install_date,'YYYYMMDD')   >   '20050101' 

select   *   from   mytable   where   install_date     >   to_date('20050101','yyyymmdd');

取得當前日期是本月的第幾周

SQL>   select   to_char(sysdate,'YYYYMMDD   W   HH24:MI:SS')   from   dual;
 
TO_CHAR(SYSDATE,'YY
-------------------
20030327   4   18:16:09
 
SQL>   select   to_char(sysdate,'W')   from   dual;
 
T
-
4

№2:取得當前日期是一個星期中的第幾天,注意星期日是第一天

SQL>   select   sysdate,to_char(sysdate,'D')   from   dual;
 
SYSDATE       T
---------   -
27-MAR-03   5

類似:

select   to_char(sysdate,'yyyy')   from   dual;   --年
select   to_char(sysdate,'Q'   from   dual;           --季
select   to_char(sysdate,'mm')   from   dual;       --月
select   to_char(sysdate,'dd')   from   dual;       --日
ddd   年中的第幾天
WW   年中的第幾個星期
W   該月中第幾個星期

DAY 週中的星期幾
D   今天對映的NUMBER

'1','星期日',  '2','星期一', '3','星期二', '4','星期三', '5','星期四',  '6','星期五',  '7','星期六'
hh   小時(12)
hh24   小時(24)
Mi   分
ss   秒

№3:取當前日期是星期幾中文顯示:

SQL>   select   to_char(sysdate,'day')   from   dual;
 
TO_CHAR(SYSDATE,'DAY')
----------------------
星期四

№4:如果一個表在一個date類型的字段上面建立了索引,如何使用

alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'


№5: 得到當前的日期
select sysdate from dual;

№6: 得到當天凌晨0點0分0秒的日期
select trunc(sysdate) from dual;

-- 得到這天的最後一秒
select trunc(sysdate) + 0.99999 from dual;

-- 得到小時的具體數值
select trunc(sysdate) + 1/24 from dual;

select trunc(sysdate) + 7/24 from dual;

№7:得到明天凌晨0點0分0秒的日期

select trunc(sysdate+1) from dual;

select trunc(sysdate)+1 from dual;


№8: 本月一日的日期
select trunc(sysdate,'mm') from dual;


№9:得到下月一日的日期
select trunc(add_months(sysdate,1),'mm') from dual;

№10:返回當前月的最後一天?
select last_day(sysdate) from dual;     
select last_day(trunc(sysdate)) from dual;
select trunc(last_day(sysdate)) from dual;
select trunc(add_months(sysdate,1),'mm') - 1 from dual;


№11: 得到一年的每一天
select trunc(sysdate,'yyyy')+ rn -1 date0
from
(select rownum rn from all_objects
where rownum<366);


№12:今天是今年的第N天
SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;

№13:如何在給現有的日期加上2年
select add_months(sysdate,24) from dual;

№14:判斷某一日子所在年分是否爲潤年
select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','閏年','平年') from dual;

№15:判斷兩年後是否爲潤年
select decode(to_char(last_day(trunc(add_months(sysdate,24),'y')+31),'dd'),'29','閏年','平年') from dual;


№16:得到日期的季度

select ceil(to_number(to_char(sysdate,'mm'))/3) from dual;

select to_char(sysdate, 'Q') from dual;


查詢星期幾:
select to_char(sysdate,'day') from dual;
查詢幾號:
select to_char(sysdate,'dd') from dual;
查詢小時數:
select to_char(sysdate,'hh24') from dual;
查詢時間:
select to_char(sysdate,'hh24:mi:ss') from dual;
查詢日期時間:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
查詢星期幾:
select to_char(to_date('2006-11-21','YYYY-MM-DD'),'DAY') from dual;
select to_char(to_date('2006-11-21','YYYY-MM-DD'),'DAY','NLS_DATE_LANGUAGE = American') from dual;
alter session set nls_date_language = 'simplified chinese';
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
查詢兩個日期間的天數:
FLOOR:返回等於或小於x的最大整數:
select floor(to_date('20061121','yyyymmdd') - to_date('20061120','yyyymmdd')) from dual;
//獲取小時
SELECT EXTRACT(HOUR from TIMESTAMP '2005-10-10 10:10:10') from DUAL;
//獲取月份
SELECT EXTRACT(MONTH from SYSDATE) from DUAL;
//計算一年多少天
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual;
//注意:trunc(sysdate,'year')截取生成==>'2006-01-01';
select trunc(sysdate,'year') from dual;
//查詢一年中的第幾天
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual;
next_day(sysdate,6)是從當前開始下一個星期五。後面的數字是從星期日開始算起。
1  2  3  4  5  6  7
日 一 二 三 四 五 六
select next_day(to_date('2006-11-21','YYYY-MM-DD'),6);
//返回一個月份的最後一天
Select last_day(date'2006-02-01') D from dual;
Select last_day(to_date('2006-02-01','YYYY-MM-DD')) from dual;
//返回一個月份的最後一天是星期幾
select to_char(last_day(to_date('2006-11-21','YYYY-MM-DD')),'DAY') from dual;
//獲取上個月末天:
select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;
==>注意:last_day(sysdate)表示sysdate這個月的最後一天
add_months(last_day(sysdate),-1)表示上個月的最後一天
//上月今天
select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;
//上月首天
select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual

select * from aaa where rq>;='2001-11-01' and rq<='2002-03-01'

綜述:通過上面的彙總,應該能應付一般的SQL查詢日期的應用了。一般情況下要綜合上面所說的多個查詢才能得出自己想要的結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章