Oracle数据库日期格式化字符串踩坑

1. 描述

在Oracle数据库操作日期字段时,我用的是java风格的日期格式模板,即MM表示月份,mm表示分钟,hh表示12小时,HH表示24小时,结果与预期不一致。
Oracle数据库版本为11g,其他版本未验证。
下述只是我的个人总结,如有错误,欢迎补充。

2. 验证

select 
SYSDATE,
TO_CHAR(SYSDATE,'yyyy-MM-dd HH:mm:ss') "HH:mm:ss",
TO_CHAR(SYSDATE,'yyyy-MM-dd HH:MM:ss') "HH:MM:ss",
TO_CHAR(SYSDATE,'yyyy-MM-dd hh:MM:ss') "hh:MM:ss",
TO_CHAR(SYSDATE,'yyyy-MM-dd hh:mm:ss') "hh:mm:ss",
TO_CHAR(SYSDATE,'yyyy-MM-dd hh:mi:ss') "hh:mi:ss",
TO_CHAR(SYSDATE,'yyyy-MM-dd hh12:mi:ss') "hh12:mi:ss",
TO_CHAR(SYSDATE,'yyyy-MM-dd hh24:mi:ss') "hh24:mi:ss"
from dual;  

执行结果如下
在这里插入图片描述

3. 结论

oracle数据库的日期格式模板,不区分大小写

  • HHhh相同,都表示12小时格式
  • MMmm相同,都表示月份
  • 24小时使用hh24HH24
  • 分钟使用miMI

java中的 yyyy-MM-dd_HH-mm-ss,在Oracle中是yyyy-MM-dd_hh24-mi-ss

附字符串格式日期时间差计算

    LPAD(TO_CHAR(
        TRUNC(SYSDATE - TO_DATE(START_TIME, 'YYYY-MM-DD HH24:MI:SS')) * 24 
        + FLOOR(MOD(SYSDATE - TO_DATE(START_TIME, 'YYYY-MM-DD HH24:MI:SS'), 1) * 24), 'FM09'), 2, '0') || ':' || 
    LPAD(TO_CHAR(
        FLOOR(MOD((SYSDATE - TO_DATE(START_TIME, 'YYYY-MM-DD HH24:MI:SS')) * 1440, 60)), 'FM09'), 2, '0') || ':' || 
    LPAD(TO_CHAR(
        FLOOR(MOD((SYSDATE - TO_DATE(START_TIME, 'YYYY-MM-DD HH24:MI:SS')) * 86400, 60)), 'FM09'), 2, '0') 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值