1. 程式人生 > >SQL之to_date()以及關於日期處理的詳解

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;