oracle 日期操作 彙總
- 計算從今天起的第一個星期日是的日期
select NEXT_DAY(SYSDATE,7) from dual;
- 計算當前日期的年月日
select Extract(year from sysdate) from dual; --年
select Extract(month from sysdate) from dual; --月
select Extract(day from sysdate) from dual; --日
------------------------------------------------------------------------------------
加法
select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add_months(sysdate,1) from dual; --加1月 select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期 select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual; --加1天 select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --加1小時 select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1分鐘 select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1秒
減法
select sysdate,add_months(sysdate,-12) from dual; --減1年 select sysdate,add_months(sysdate,-1) from dual; --減1月 select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual; --減1星期 select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual; --減1天 select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --減1小時 select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --減1分鐘 select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --減1秒
- 有兩個日期資料START_DATE,END_DATE,欲得到這兩個日期的時間差(以天,小時,分鐘,秒,毫秒):
天:
ROUND(TO_NUMBER(END_DATE - START_DATE))
小時:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24)
分鐘:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60)
秒:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60)
毫秒:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 60)
- 減12小時
select sysdate s, (sysdate - to_dsinterval('0 12:00:00')) ss from dual;
Oracle 獲取當前日期及日期格式
獲取系統日期: SYSDATE()
格式化日期: TO_DATE(SYSDATE(),'YY/MM/DD HH24:MI:SS)
格式化字元: TO_CHAR(SYSDATE(),'YY/MM/DD HH24:MI:SS)
格式化數字: TO_NUMBER
注: TO_CHAR 把日期或數字轉換為字串
TO_CHAR(number, '格式')
TO_CHAR(salary, '$99,999.99')
TO_CHAR(date, '格式')
TO_DATE 把字串轉換為資料庫中的日期型別
TO_DATE(char, '格式')
TO_NUMBER 將字串轉換為數字
TO_NUMBER(char, '格式')
Oracle-日期轉化數字的方法
1. 首先你需要先把日期轉化為字元 to_char(sysdate,'yyyymmdd')
2. to_number(to_char(sysdate,'yyyymmdd'))
select to_number(to_char(sysdate,'yyyymmdd')) from dual;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
- 返回系統日期,輸出 25-12月-09
select sysdate from dual;
- mi是分鐘,輸出 2009-12-25 14:23:31
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
- mm會顯示月份,輸出 2009-12-25 14:12:31
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;
- 輸出 09-12-25 14:23:31
select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual
- 輸出 2009-12-25 14:23:31
select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh24:mi:ss') from dual
而如果把上式寫作: select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh:mi:ss') from dual則會報錯,因為小時hh是12進位制,14為非法輸入,不能匹配。
- 輸出 $10,000,00 :
select to_char(1000000,'$99,999,99') from dual;
- 輸出 RMB10,000,00 :
select to_char(1000000,'L99,999,99') from dual;
- 輸出 1000000.12 :
select trunc(to_number('1000000.123'),2) from dual;
select to_number('1000000.123') from dual;
轉換的格式:
表示 year 的:y 表示年的最後一位 、
yy 表示年的最後2位 、
yyy 表示年的最後3位 、
yyyy 用4位數表示年
表示month的: mm 用2位數字表示月 、
mon 用簡寫形式, 比如11月或者nov 、
month 用全稱, 比如11月或者november
表示day的:dd 表示當月第幾天 、
ddd 表示當年第幾天 、
dy 當週第幾天,簡寫, 比如星期五或者fri 、
day 當週第幾天,全稱, 比如星期五或者friday
表示hour的:hh 2位數表示小時 12進位制 、
hh24 2位數表示小時 24小時
表示minute的:mi 2位數表示分鐘
表示second的:ss 2位數表示秒 60進位制
表示季度的:q 一位數 表示季度 (1-4)
另外還有ww 用來表示當年第幾周 w用來表示當月第幾周。
24小時制下的時間範圍:00:00:00-23:59:59
12小時制下的時間範圍:1:00:00-12:59:59
數字格式: 9 代表一個數字
0 強制顯示0
$ 放置一個$符
L 放置一個浮動本地貨幣符
. 顯示小數點
, 顯示千位指示符
補充:
- 當前時間減去7分鐘的時間
select sysdate,sysdate - interval '7' MINUTE from dual;
- 當前時間減去7小時的時間
select sysdate - interval '7' hour from dual;
- 當前時間減去7天的時間
select sysdate - interval '7' day from dual;
- 當前時間減去7月的時間
select sysdate,sysdate - interval '7' month from dual;
- 當前時間減去7年的時間
select sysdate,sysdate - interval '7' year from dual;
- 時間間隔乘以一個數字
select sysdate,sysdate - 8*interval '7' hour from dual;
含義解釋:
- Dual偽列
Dual 是 Oracle中的一個實際存在的表,任何使用者均可讀取,常用在沒有目標表的select語句塊中。
不同系統可能返回日期的格式不一樣。 返回當前連線的使用者:select user from dual;
1.日期時間間隔操作
當前時間減去7分鐘的時間
select sysdate,sysdate - interval ’7’ MINUTE from dual
當前時間減去7小時的時間
select sysdate - interval ’7’ hour from dual
當前時間減去7天的時間
select sysdate - interval ’7’ day from dual
當前時間減去7月的時間
select sysdate,sysdate - interval ’7’ month from dual
當前時間減去7年的時間
select sysdate,sysdate - interval ’7’ year from dual
時間間隔乘以一個數字
select sysdate,sysdate - 8 *interval ’2’ hour from dual
2.日期到字元操作
select sysdate,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual
select sysdate,to_char(sysdate,’yyyy-mm-dd hh:mi:ss’) from dual
select sysdate,to_char(sysdate,’yyyy-ddd hh:mi:ss’) from dual
select sysdate,to_char(sysdate,’yyyy-mm iw-d hh:mi:ss’) from dual
參考oracle的相關關文件(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)
3. 字元到日期操作
select to_date(’2003-10-17 21:15:37’,’yyyy-mm-dd hh24:mi:ss’) from dual
具體用法和上面的to_char差不多。
4. trunk/ ROUND函式的使用
select trunc(sysdate ,’YEAR’) from dual
select trunc(sysdate ) from dual
select to_char(trunc(sysdate ,’YYYY’),’YYYY’) from dual
5.oracle有毫秒級的資料型別
--返回當前時間 年月日小時分秒毫秒
select to_char(current_timestamp(5),’DD-MON-YYYY HH24:MI:SSxFF’) from dual;
--返回當前 時間的秒毫秒,可以指定秒後面的精度(最大=9)
select to_char(current_timestamp(9),’MI:SSxFF’) from dual;
6.計算程式執行的時間(ms)
declare
type rc is ref cursor;
l_rc rc;
l_dummy all_objects.object_name%type;
l_start number default dbms_utility.get_time;
begin
for I in 1 .. 1000
loop
open l_rc for
’select object_name from all_objects ’||
’where object_id = ’ || i;
fetch l_rc into l_dummy;
close l_rc;
end loop;
dbms_output.put_line
( round( (dbms_utility.get_time-l_start)/100, 2 ) ||
’ seconds...’ );
end;