本文不再更新,可能存在內容過時的情況,實時更新請移步我的新博客:Oracle中的TO_DATE和TO_CHAR函數以及日期處理;
oracle 中 TO_DATE 函數的時間格式,以 2008-09-10 23:45:56 為例。
Oracle中日期的格式
Year(年):
格式 | 說明 | 顯示值 | 備注 |
---|---|---|---|
yy | two digits(兩位年) | 08 | |
yyy | three digits(三位年) | 008 | |
yyyy | four digits(四位年) | 2008 |
Month(月):
格式 | 說明 | 顯示值 | 備注 |
---|---|---|---|
mm | number(兩位月) | 09 | |
mon | abbreviated(字符集表示) | 9月 若是英文版,則顯示sep | |
month | spelled out(字符集表示) | 9月 若是英文版, 則顯示 september |
Day(日):
格式 | 說明 | 顯示值 | 備注 |
---|---|---|---|
dd | number(當月第幾天) | 10 | |
ddd | number(當年第幾天) | 254 | |
dy | abbreviated(當周第幾天簡寫) | 星期三 | 若是英文版, 則顯示 wed |
day | spelled out(當周第幾天全寫) | 星期三 若是英文版, 則顯示 wednesday | |
ddspth | spelled out | thirteenth | 格式后綴 SP:相應日期部分的英文拼寫 TH:相應日期部分日的序號,即在表示日的數字后加”th” |
Hour(時):
格式 | 說明 | 顯示值 | 備注 |
---|---|---|---|
hh | two digits(12小時進制) | 11 | |
hh24 | two digits(24小時進制) | 23 |
Minute(分):
格式 | 說明 | 顯示值 | 備注 |
---|---|---|---|
mi | two digits(60進制) | 45 |
Second(秒):
格式 | 說明 | 顯示值 | 備注 |
---|---|---|---|
ss | two digits(60進制) | 56 |
其他:
格式 | 說明 | 顯示值 | 備注 |
---|---|---|---|
Q | digit(季度) | 3 | |
WW | digit(當年第幾周) | 37 | |
W | digit(當月第幾周) | 2 |
說明:
12小時格式下時間范圍為: 1:00:00 – 12:59:59(12 小時制下的 12:59:59 對應 24 小時制下的 00:59:59) ;24小時格式下時間范圍為: 0:00:00 – 23:59:59
Oracle中日期格式的轉化
- 日期和字符串格式的轉換(to_date,to_char)
--日期格式轉換為字符串
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;
select to_char(sysdate,'yyyy') as nowYear from dual; //獲取時間的年
select to_char(sysdate,'mm') as nowMonth from dual; //獲取時間的月
select to_char(sysdate,'dd') as nowDay from dual; //獲取時間的日
select to_char(sysdate,'hh24') as nowHour from dual; //獲取時間的時
select to_char(sysdate,'mi') as nowMinute from dual; //獲取時間的分
select to_char(sysdate,'ss') as nowSecond from dual; //獲取時間的秒
--字符串轉換為日期格式
select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual//
2.求某天是星期幾
--查詢
select to_char(to_date('2015-12-13','yyyy-mm-dd'),'day') from dual;
--輸出
星期三
--查詢
select to_char(to_date('2015-12-13','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
--輸出
sunday
設置日期語言的方式:
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
也可以這樣:
select to_date('2015-12-13','yyyy-mm-dd','NLS_DATE_LANGUAGE = American') from dual;
3.計算兩個日期之間的天數
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;
因此,你也可以計算兩個日期之間毫秒數或當前日期的毫秒數
--計算兩個日期之間的毫秒數
select (sysdate - to_date('1970-01-01','yyyy-mm-dd'))* 86400000 from dual;
注:上面的計算需要根據時區進行調整,差別為8/24天,也就是8小時。
4.不同時區的處理
select new_time(date,timezone1,timezone2) from dual;
函數說明:
- 根據date在timezone1時區的時間,返回對應的在timezone2時區對應的時間;
參數說明:
- date:日期時間型表達式;
- timezone1:舊時區;
- timezone2: 新時區;
時區參數:
大西洋標准時間: AST或ADT
阿拉斯加_夏威夷時間: HST或HDT
英國夏令時: BST或BDT
美國山區時間: MST或MDT
美國中央時區: CST或CDT
新大陸標准時間: NST
美國東部時間: EST或EDT
太平洋標准時間: PST或PDT
格林威治標准時間: GMT
Yukou標准時間: YST或YDT
5.月份加減
--add_months(date,n):返回date加上n個月后的新日期
select sysdate ,add_months(sysdate,3) from dual;
6.獲取指定日期所屬季度
select to_char(to_date('2019-12-26','yyyy-mm-dd'),'Q') from dual;
本文不再更新,可能存在內容過時的情況,實時更新請移步我的新博客:Oracle中的TO_DATE和TO_CHAR函數以及日期處理;