Oracle中的TO_DATE和TO_CHAR函數以及日期處理


本文不再更新,可能存在內容過時的情況,實時更新請移步我的新博客: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中日期格式的轉化

  1. 日期和字符串格式的轉換(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函數以及日期處理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM