1、查詢現在時刻
- select sysdate from dual
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. |
- select to_char(sysdate,'yyyymmdd hh24:mi:ss')
結果:20100513 10:40:45
相反的是to_date函數
3、某月的最後一天 用last_day函數
- select last_day(sysdate)from dual
結果:2010-5-31 10:44:21
4、加法計算 +1即增加一天,如果精確到小時、分鐘、秒則用除法
如:獲得下月第一天時刻:
- select last_day(sysdate)+1from dual
再如:獲得一小時後時刻
- select sysdate+1/24 from dual
再如:獲得10秒後的時刻
- select sysdate+1/24/60/60*10from dual
5、獲得下一星期幾的日期 使用next_day函數
如現在要獲得下個星期一的日期:
- select next_day(sysdate,2)from dual
注意這裏是2,爲什麼是2?因爲這裏有效的值是1-7,而1表示星期日,2表示星期一……以此類推到星期六。
6、獲得某年、某月的第一天,或者某天的0點整時刻 使用trunc函數
- select TRUNC(sysdate,'YYYY')from dual
結果:2010-01-01
- select TRUNC(sysdate,'MM')from dual
結果:2010-05-01
- select TRUNC(sysdate) from dual
結果:2010-05-13 (今天)
- select TRUNC(sysdate,'HH')from dual
結果:2010-05-13 10:00:00 (現在是10點多)
7、使用add_months可以以當前日期爲基準查詢上幾月、下幾月的日期
- select add_months(sysdate,-1)from dual
負數表示查詢上n月
如果要查上一年,則是-12,並沒有單獨的add_years函數!
再想:如果要查上一週,有沒有特殊函數可提供?沒有,一週就是7天嘛,所以查詢語句爲:
- 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查詢日期的應用了。一般情況下要綜合上面所說的多個查詢才能得出自己想要的結果。