Oracle日期时间汇总

常用日期

SELECT SYSDATE FROM DUAL;--返回系统时间,2019-09-14 10:35:21
SELECT SYSTIMESTAMP FROM DUAL;--14-9月 -19 10.27.31.496000 上午 +08:00

--时区的概念
--返回会话的时区中的系统时间(可以自己设置会话的时区,区别于数据库时区)2019-09-14 10:35:21
SELECT CURRENT_DATE FROM DUAL;
SELECT CURRENT_TIMESTAMP FROM DUAL;--14-9月 -19 12.02.50.601000 下午 +08:00

--当时区修改之后(美国时区),上面两个查询的日期就不是当前系统显示的日期时间
ALTER SESSION SET TIME_ZONE='-08:00';
SELECT SESSIONTIMEZONE FROM DUAL;---08:00
SELECT LOCALTIMESTAMP FROM DUAL;

SELECT ADD_MONTHS(SYSDATE,12) FROM DUAL;--加1年,2020-09-14 15:16:15
SELECT SYSDATE+1 FROM DUAL;--天数的增减,2019-09-15 10:38:13
SELECT ADD_MONTHS(SYSDATE,-5) FROM DUAL;--月份的增减,2019-04-14 10:40:59
--如果指定日期是月份最后一天,增减一个月之后的月份也是最后一天,2019-10-31
SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2019-09-30','YYYY-MM-DD'),1),'YYYY-MM-DD') FROM DUAL;

格式化(日期和字符串的转化)

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;--2019-09-14 09:45:35
SELECT TO_CHAR(DATE '2019-09-14'+1,'YYYYMMDD') FROM DUAL;--20190915
SELECT TO_CHAR(TO_DATE('2019-09-10','YYYY-MM-DD'),'DAY') FROM DUAL;--星期二
SELECT TO_CHAR(SYSDATE-7,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;--往前一周,2019-09-07 15:19:39
SELECT TO_CHAR(SYSDATE+1/24,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;--加一小时,2019-09-14 16:19:19
SELECT TO_CHAR(SYSDATE+1/24/60,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;--加一分钟,2019-09-14 15:21:40

SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL;--2019,年份
SELECT TO_CHAR(SYSDATE,'Q') FROM DUAL;--3,返回第几个季度
SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL;--09,月份
SELECT TO_CHAR(SYSDATE,'MONTH') FROM DUAL;--9月 
SELECT TO_CHAR(SYSDATE,'W') FROM DUAL;--2,返回本月第几周
SELECT TO_CHAR(SYSDATE,'WW') FROM DUAL;--37,返回本年第几周
SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL;--14,返回本月第几天
SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;--257,返回本年第几天
SELECT TO_CHAR(SYSDATE,'DY') FROM DUAL;--星期六
SELECT TO_CHAR(SYSDATE,'HH') FROM DUAL;--04,12进制时间
SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL;--16,24进制
SELECT TO_CHAR(SYSDATE,'MI') FROM DUAL;--31,分钟
SELECT TO_CHAR(SYSDATE,'SS') FROM DUAL;--11,秒钟

SELECT SYSDATE - INTERVAL '10' YEAR FROM DUAL;--减去10年,2009-09-14 15:34:29
SELECT SYSDATE - INTERVAL '10' MONTH FROM DUAL;--减去10个月,2018-11-14 15:36:11
SELECT SYSDATE - 10 FROM DUAL;--减去10天,2019-09-04 15:31:58
SELECT SYSDATE - INTERVAL '10' DAY FROM DUAL;--减去10天,2019-09-04 15:31:58
SELECT SYSDATE - INTERVAL '10' MINUTE FROM DUAL;--减去10分钟,2019-09-14 15:12:10
SELECT SYSDATE - INTERVAL '10' HOUR FROM DUAL;--减去10小时,2019-09-14 5:23:01
SELECT SYSDATE - 2*INTERVAL '10' HOUR FROM DUAL;--时间间隔可以乘以一个数字,2019-09-13 19:37:24

SELECT TO_DATE('20190914','YYYYMMDD') FROM DUAL;--2019-09-14
SELECT TO_DATE('2019-09-14 09:10:20','YYYY-MM-DD HH24:MI:SS') FROM DUAL;--2019-09-14 9:10:20

SELECT LAST_DAY(SYSDATE) FROM DUAL;--本月最后一天,2019-09-30 11:30:52
SELECT LAST_DAY(DATE '2019-08-05') FROM DUAL;--指定日期所在月份的最后一天,2019-08-31
SELECT NEXT_DAY(TO_DATE('2019-09-14','YYYY-MM-DD'),'星期三') FROM DUAL;--指定日期的下个星期三的日期,2019-09-18

--两个日期之间相差月份数(日期1>日期2,返回正数,日期1的天和日期2的天,同一天返回整数,不是同一天,返回小数)
SELECT
MONTHS_BETWEEN(TO_DATE('2019-09-14','YYYY-MM-DD'),TO_DATE('2018-10-11','YYYY-MM-DD')) AS 小数,-- 11.0967741935484
MONTHS_BETWEEN(TO_DATE('2019-09-14','YYYY-MM-DD'),TO_DATE('2018-10-14','YYYY-MM-DD')) AS 正整数,-- 11
MONTHS_BETWEEN(TO_DATE('2018-10-14','YYYY-MM-DD'),TO_DATE('2019-9-14','YYYY-MM-DD')) AS 负整数-- -11
FROM DUAL;

SELECT FLOOR(MONTHS_BETWEEN(SYSDATE,DATE '2001-05-02')/12) AS 年龄 FROM DUAL;--18,计算日期之间差几个月,可计算年龄

 日期提取、四舍五入、截取等

--提取日期时间里面的年、月、日、小时、分钟、秒钟
SELECT 
EXTRACT(YEAR FROM TIMESTAMP '2019-08-22 16:33:45') AS 年,
EXTRACT(MONTH FROM TIMESTAMP '2019-08-22 16:33:45') AS 月,
EXTRACT(DAY FROM TIMESTAMP '2019-08-22 16:33:45') AS 日,
EXTRACT(HOUR FROM TIMESTAMP '2019-08-22 16:33:45') AS 小时,
EXTRACT(MINUTE FROM TIMESTAMP '2019-08-22 16:33:45') AS 分钟,
EXTRACT(SECOND FROM TIMESTAMP '2019-08-22 16:33:45') AS 秒钟
FROM DUAL;

SELECT SYSDATE,--2019-09-14 11:58:35
ROUND(SYSDATE,'YYYY') AS 年,--2020-01-01
ROUND(SYSDATE,'MM') AS 月,--2019-09-01
ROUND(SYSDATE,'DD') AS 日,--2019-09-14
ROUND(SYSDATE,'HH24') AS 小时--2019-09-14 12:00:00
FROM DUAL;


SELECT SYSDATE,--2019-09-14 12:01:12
TRUNC(SYSDATE,'YYYY') AS 年,--2019-01-01
TRUNC(SYSDATE,'MM') AS 月,--2019-09-01
TRUNC(SYSDATE,'DD') AS 日,--2019-09-14
TRUNC(SYSDATE,'HH24') AS 小时--2019-09-14 12:00:00
FROM DUAL;

/*
相差天数:1
相差小时:24
相差分钟:1440
*/
DECLARE 
START_DATE DATE;
END_DATE DATE;
BEGIN
START_DATE :=SYSDATE-1;
END_DATE:=SYSDATE;
DBMS_OUTPUT.PUT_LINE('相差天数:'||TO_NUMBER(END_DATE-START_DATE));
DBMS_OUTPUT.PUT_LINE('相差小时:'||TO_NUMBER(END_DATE-START_DATE)*24);
DBMS_OUTPUT.PUT_LINE('相差分钟:'||TO_NUMBER(END_DATE-START_DATE)*24*60);
END;

--其他
SELECT TO_CHAR(1000000,'$9,999,999') FROM DUAL;--$1,000,000
SELECT TO_CHAR(10000,'L9,999,999') FROM DUAL;--¥10,000
SELECT TRUNC(TO_NUMBER('1000.123'),2) FROM DUAL;--1000.12
SELECT TO_NUMBER('1000.123') FROM DUAL; --1000.123

--时间相加函数
CREATE OR REPLACE FUNCTION FUNC_AddTime(T1 IN DATE, T2 IN DATE) RETURN DATE IS
  hh       NUMBER;
  mi       NUMBER;
  ss       NUMBER;
  hours    NUMBER;
  RES_TIME DATE;
BEGIN
  SELECT TO_NUMBER(TO_CHAR(T2, 'HH24')) INTO hh FROM DUAL;
  SELECT TO_NUMBER(TO_CHAR(T2, 'MI')) INTO mi FROM DUAL;
  SELECT TO_NUMBER(TO_CHAR(T2, 'SS')) INTO ss FROM DUAL;
  hours := (hh + (mi / 60) + (ss / 3600)) / 24;
  SELECT T1 + hours INTO RES_TIME FROM DUAL;
  RETURN RES_TIME;
END;

SELECT FUNC_AddTime(SYSDATE,TO_DATE('2018-09-09 05:20:22','YYYY-MM-DD HH24:MI:SS')) FROM DUAL;

 

发布了46 篇原创文章 · 获赞 9 · 访问量 3661

猜你喜欢

转载自blog.csdn.net/weixin_41896770/article/details/100847513