SQL> --获取当前时间 yyyy-mm-dd hh24:mi:ss
SQL> select sysdate from dual;
SYSDATE
-----------
2022/9/21 16:47:52
TO_DATE格式常用格式YYYY-MM-DD HH24:MI:SS
SQL> --to_date函数将字符转换为日期
SQL> SELECT TO_DATE('2014-07-11 13:45:23', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
TO_DATE('2014-07-1113:45:23','
------------------------------
2014/7/11 13:45:23
格式:to_char(date) ,该函数将一个日期型数据转换成一个字符型数据
SQL> --日期转化为字符串
SQL> select to_char(sysdate, 'yyyy-MM-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
------------------------------
2022-09-21 16:21:49
2.其他常用的to_char转换
SQL> --获取时间的年
SQL> select to_char(sysdate,'yyyy')from dual;
TO_CHAR(SYSDATE,'YYYY')
-----------------------
2022
SQL> --获取时间的月
SQL> select to_char(sysdate,'MM') from dual;
TO_CHAR(SYSDATE,'MM')
---------------------
09
SQL> --获取时间的日
SQL> select to_char(sysdate,'dd') from dual;
TO_CHAR(SYSDATE,'DD')
---------------------
21
SQL> --获取时间的时
SQL> select to_char(sysdate,'hh24') from dual;
TO_CHAR(SYSDATE,'HH24')
-----------------------
16
SQL> --获取时间的分
SQL> select to_char(sysdate,'mi') from dual;
TO_CHAR(SYSDATE,'MI')
---------------------
21
SQL> --获取时间的秒
SQL> select to_char(sysdate,'ss') from dual;
TO_CHAR(SYSDATE,'SS')
---------------------
50
格式:trunc(date)
SQL> --trunc获取某天0点0分0秒
SQL> select trunc(sysdate) from dual;
TRUNC(SYSDATE)
--------------
2022/9/21
格式:add_month(date,integer) ,integer表示要加的月份,如果是负值就表示要减的月份
SQL> --获取下N个月 yyyy-mm-dd hh24:mi:ss
SQL> select add_months(sysdate,1) from dual;
ADD_MONTHS(SYSDATE,1)
---------------------
2022/10/21 16:30:48
SQL> --获取前N个月 yyyy-mm-dd hh24:mi:ss
SQL> select add_months(sysdate,-1) from dual;
ADD_MONTHS(SYSDATE,-1)
----------------------
2022/8/21 16:30:48
SQL> --获取下N个月第一天0点 yyyy-mm-dd
SQL> select trunc(add_months(sysdate,1)) from dual;
TRUNC(ADD_MONTHS(SYSDATE,1))
----------------------------
2022/10/21
SQL> --获取下N个月最后1天 yyyy-mm-dd hh24:mi:ss
SQL> select last_day(add_months(sysdate,1)) from dual;
LAST_DAY(ADD_MONTHS(SYSDATE,1)
------------------------------
2022/10/31 16:30:48
格式:last_day(date)
SQL> --获取某月最后1天
SQL> SELECT LAST_DAY(SYSDATE) FROM dual;
LAST_DAY(SYSDATE)
-----------------
2022/9/30 16:50:0
格式:next_day(date,char), char表示星期几
SQL> select sysdate, next_day(sysdate,'星期一') from dual;
SYSDATE NEXT_DAY(SYSDATE,'星期一')
----------- --------------------------
2022/9/21 1 2022/9/26 17:18:36
SQL> --当前时间:2022/9/21 17:03:04
SQL> select floor(sysdate-to_date('20220921','yyyymmdd')) from dual;
FLOOR(SYSDATE-TO_DATE('2022092
------------------------------
0
SQL> select floor(sysdate-to_date('20220920','yyyymmdd')) from dual;
FLOOR(SYSDATE-TO_DATE('2022092
------------------------------
1
SQL> --计算月份差
SQL> select months_between(to_date('2022-01-01','yyyy-mm-dd') ,to_date('2022-10-01','yyyy-mm-dd') )from dual;
MONTHS_BETWEEN(TO_DATE('2022-0
------------------------------
-9
SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟,如果分使用mm会出现ORA-01810错误
SQL> --错误格式
SQL> select to_date('2015-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;
select to_date('2015-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual
ORA-01810: format code appears twice
SQL> --正确格式
SQL> select to_date('2015-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
TO_DATE('2015-01-0113:14:20','
------------------------------
2015/1/1 13:14:20
SQL> --将26-9月 -17 06.46.00.000000000 下午 转换成yyyy-mm-dd hh24:mi:ss
SQL> select to_char(cast(cast('26-9月 -17 06.46.00.000000000 下午' as timestamp) as date),'yyyy-mm-dd hh24:mi:ss') dateStr from dual;
DATESTR
-------------------
2017-09-26 18:46:00
SQL> --将yyyy-mm-dd hh24:mi:ss 转换成 26-9月 -17 06.46.00.000000000 下午
SQL> select to_timestamp('2017-09-26 18:46:00','yyyy-mm-dd hh24:mi:ss') from dual;
TO_TIMESTAMP('2017-09-2618:46:
--------------------------------------------------------------------------------
26-9月 -17 06.46.00.000000000 下午
前一篇:Oracle死锁问题: enq: TX - row lock contention