SQL之to_date()以及關於日期處理的詳解


日期例子:
SELECT TO_DATE('2006-05-01 19:25:34', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL
SELECT TO_DATE('2006-05-01 19:25', 'YYYY-MM-DD HH24:MI') FROM DUAL
SELECT TO_DATE('2006-05-01 19', 'YYYY-MM-DD HH24') FROM DUAL
SELECT TO_DATE('2006-05-01', 'YYYY-MM-DD') FROM DUAL
SELECT TO_DATE('2006-05', 'YYYY-MM') FROM DUAL
SELECT TO_DATE('2006', 'YYYY') FROM DUAL

 日期格式 
格式控制 描述 
YYYY、YYY、YY 分別代表4位、3位、2位的數字年 
YEAR 年的拼寫 
MM 數字月 
MONTH 月的全拼 
MON 月的縮寫 
DD 數字日 
DAY 星期的全拼 
DY 星期的縮寫 
AM 表示上午或者下午 
HH24、HH12 12小時制或24小時制 
MI 分鍾 
SS 秒鍾 
SP 數字的拼寫 
TH 數字的序數詞

日期說明: 
當省略HH、MI和SS對應的輸入參數時,Oracle使用0作為DEFAULT值。如果輸入的日期數據忽略時間部分,Oracle會將時、分、秒部分都置為0,也就是說會取整到日。
同樣,忽略了DD參數,Oracle會采用1作為日的默認值,也就是說會取整到月。
但是,不要被這種“慣性”所迷惑,如果忽略MM參數,Oracle並不會取整到年,取整到當前月。

注意: 
1.在使用Oracle的to_date函數來做日期轉換時,可能會直覺地采用“yyyy-MM-dd HH:mm:ss”的格式作為格式進行轉換,但是在Oracle中會引起錯誤:“ORA 01810 格式代碼出現兩次”。如:
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;原因是SQL中不區分大小寫,MM和mm被認為是相同的格式代碼,所以Oracle的SQL采用了mi代替分鍾。select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;

2.另要以24小時的形式顯示出來要用HH24
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分鍾
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm會顯示月份

例子:
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;   //獲取時間的秒 

2、求某天是星期幾
 select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;      
   星期一      
   select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;      
   monday      
   設置日期語言      
   ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';      
   也可以這樣      
   TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')     

3、兩個日期間的天數
select floor(sysdate - to_date('20020405','yyyymmdd')) from dual; 

 


免責聲明!

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



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