• Oralce 日期型函数使用



    一常用函数


    1.sysdate获取系统时间

    1. SQL> --获取当前时间 yyyy-mm-dd hh24:mi:ss
    2. SQL> select sysdate from dual;
    3. SYSDATE
    4. -----------
    5. 2022/9/21 16:47:52

    2.to_date函数将字符转换为日期

    TO_DATE格式常用格式YYYY-MM-DD HH24:MI:SS

    1. SQL> --to_date函数将字符转换为日期
    2. SQL> SELECT TO_DATE('2014-07-11 13:45:23', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
    3. TO_DATE('2014-07-1113:45:23','
    4. ------------------------------
    5. 2014/7/11 13:45:23

    3.to_char函数,将时间转换为字符

       格式:to_char(date) ,该函数将一个日期型数据转换成一个字符型数据  

    1. SQL> --日期转化为字符串 
    2. SQL> select to_char(sysdate, 'yyyy-MM-dd hh24:mi:ss') from dual;
    3. TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
    4. ------------------------------
    5. 2022-09-21 16:21:49

    2.其他常用的to_char转换

    1. SQL> --获取时间的年   
    2. SQL> select to_char(sysdate,'yyyy')from dual;
    3. TO_CHAR(SYSDATE,'YYYY')
    4. -----------------------
    5. 2022
    6. SQL> --获取时间的月   
    7. SQL> select to_char(sysdate,'MM') from dual;
    8. TO_CHAR(SYSDATE,'MM')
    9. ---------------------
    10. 09
    11. SQL> --获取时间的日   
    12. SQL> select to_char(sysdate,'dd') from dual;
    13. TO_CHAR(SYSDATE,'DD')
    14. ---------------------
    15. 21
    16. SQL> --获取时间的时     
    17. SQL> select to_char(sysdate,'hh24') from dual;
    18. TO_CHAR(SYSDATE,'HH24')
    19. -----------------------
    20. 16
    21. SQL> --获取时间的分   
    22. SQL> select to_char(sysdate,'mi') from dual;
    23. TO_CHAR(SYSDATE,'MI')
    24. ---------------------
    25. 21
    26. SQL> --获取时间的秒 
    27. SQL> select to_char(sysdate,'ss') from dual;
    28. TO_CHAR(SYSDATE,'SS')
    29. ---------------------
    30. 50

    4.trunc函数获取某天0点0分0秒

       格式:trunc(date)

    1. SQL> --trunc获取某天0点0分0秒
    2. SQL> select trunc(sysdate) from dual;
    3. TRUNC(SYSDATE)
    4. --------------
    5. 2022/9/21

    5.add_month函数,增加N个月

      格式:add_month(date,integer) ,integer表示要加的月份,如果是负值就表示要减的月份

    1. SQL> --获取下N个月 yyyy-mm-dd hh24:mi:ss
    2. SQL> select add_months(sysdate,1) from dual;
    3. ADD_MONTHS(SYSDATE,1)
    4. ---------------------
    5. 2022/10/21 16:30:48
    6. SQL> --获取前N个月 yyyy-mm-dd hh24:mi:ss
    7. SQL> select add_months(sysdate,-1) from dual;
    8. ADD_MONTHS(SYSDATE,-1)
    9. ----------------------
    10. 2022/8/21 16:30:48
    11. SQL> --获取下N个月第一天0点 yyyy-mm-dd
    12. SQL> select trunc(add_months(sysdate,1)) from dual;
    13. TRUNC(ADD_MONTHS(SYSDATE,1))
    14. ----------------------------
    15. 2022/10/21
    16. SQL> --获取下N个月最后1天 yyyy-mm-dd hh24:mi:ss
    17. SQL> select last_day(add_months(sysdate,1)) from dual;
    18. LAST_DAY(ADD_MONTHS(SYSDATE,1)
    19. ------------------------------
    20. 2022/10/31 16:30:48

    6.last_day函数获取月份最后1天

      格式:last_day(date)

    1. SQL> --获取某月最后1天
    2. SQL> SELECT LAST_DAY(SYSDATE) FROM dual;
    3. LAST_DAY(SYSDATE)
    4. -----------------
    5. 2022/9/30 16:50:0

    7.next_day获取指定日期后一周的日期 

      格式:next_day(date,char), char表示星期几

    1. SQL> select sysdate, next_day(sysdate,'星期一') from dual;
    2. SYSDATE NEXT_DAY(SYSDATE,'星期一')
    3. ----------- --------------------------
    4. 2022/9/21 1 2022/9/26 17:18:36

    8.floor函数求两个时间间隔天数

    1. SQL> --当前时间:2022/9/21 17:03:04
    2. SQL> select floor(sysdate-to_date('20220921','yyyymmdd')) from dual;
    3. FLOOR(SYSDATE-TO_DATE('2022092
    4. ------------------------------
    5. 0
    6. SQL> select floor(sysdate-to_date('20220920','yyyymmdd')) from dual;
    7. FLOOR(SYSDATE-TO_DATE('2022092
    8. ------------------------------
    9. 1

    9.months_between计算月份差

    1. SQL> --计算月份差
    2. SQL> select months_between(to_date('2022-01-01','yyyy-mm-dd') ,to_date('2022-10-01','yyyy-mm-dd') )from dual;
    3. MONTHS_BETWEEN(TO_DATE('2022-0
    4. ------------------------------
    5. -9


    二常见问题


    1.Oracle使用mi代替分钟,如果使用mm格式报错ORA-01810

     SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟,如果分使用mm会出现ORA-01810错误

    1. SQL> --错误格式
    2. SQL> select to_date('2015-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;
    3. select to_date('2015-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual
    4. ORA-01810: format code appears twice
    5. SQL> --正确格式
    6. SQL> select to_date('2015-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
    7. TO_DATE('2015-01-0113:14:20','
    8. ------------------------------
    9. 2015/1/1 13:14:20

    2. 转换日期:26-9月 -17 06.46.00.000000000 下午

    1. SQL> --将26-9月 -17 06.46.00.000000000 下午 转换成yyyy-mm-dd hh24:mi:ss
    2. 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;
    3. DATESTR
    4. -------------------
    5. 2017-09-26 18:46:00
    6. SQL> --将yyyy-mm-dd hh24:mi:ss 转换成 26-9月 -17 06.46.00.000000000 下午
    7. SQL> select to_timestamp('2017-09-26 18:46:00','yyyy-mm-dd hh24:mi:ss') from dual;
    8. TO_TIMESTAMP('2017-09-2618:46:
    9. --------------------------------------------------------------------------------
    10. 26-9月 -17 06.46.00.000000000 下午

                              


    前一篇:Oracle死锁问题: enq: TX - row lock contention


  • 相关阅读:
    Android Studio git 取消本地 commit(未Push)
    约瑟夫环递归算法详解与实现
    linux ls 命令常用方法 —— 筑梦之路
    [免费专栏] Android安全之Xposed插件开发【从零手把手带】教程
    Session 和 Cookies 有什么区别?
    【电商】电商供应链产品介绍
    CPU寄存器与寻址方式
    CilckHouse创建表
    Java:SpringBoot整合SSE(Server-Sent Events)实现后端主动向前端推送数据
    计算机操作系统 (王道考研)笔记(二)
  • 原文地址:https://blog.csdn.net/Beijing_L/article/details/126977515