You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中如何将数字格式的hhmmssss转换为指定时间格式?

解决Oracle中数字时间格式转换问题

你的需求是把存储为数字的PROCESS_TIME(格式为hhmmssss,存在7位或8位两种长度)转成带冒号的目标格式,且上午小时无前导0。仅用TO_CHAR函数无法实现,因为数字长度不固定,必须结合字符串处理函数来动态拆分拼接。

具体实现SQL

SELECT 
  PROCESS_TIME,
  CASE LENGTH(TO_CHAR(PROCESS_TIME))
    WHEN 8 THEN
      -- 8位数字:拆分前2位小时、中间2位分钟、最后4位毫秒,去掉小时前导0
      TRIM(LEADING '0' FROM SUBSTR(TO_CHAR(PROCESS_TIME), 1, 2)) 
      || ':' || SUBSTR(TO_CHAR(PROCESS_TIME), 3, 2) 
      || ':' || SUBSTR(TO_CHAR(PROCESS_TIME), 5, 4)
    WHEN 7 THEN
      -- 7位数字:拆分第1位小时、第2-3位分钟、第4-7位毫秒
      SUBSTR(TO_CHAR(PROCESS_TIME), 1, 1) 
      || ':' || SUBSTR(TO_CHAR(PROCESS_TIME), 2, 2) 
      || ':' || SUBSTR(TO_CHAR(PROCESS_TIME), 4, 4)
  END AS FORMATTED_PROCESS_TIME
FROM 你的表名;

代码说明

  1. 转字符串处理:先用TO_CHAR(PROCESS_TIME)把数字转为字符串,方便按固定位置截取内容。
  2. 区分长度分支:用LENGTH()判断字符串长度,分别处理7位和8位的数字结构。
  3. 拆分与拼接:
    • 8位数字:前2位是小时,用TRIM(LEADING '0')去掉小时的前导0(比如09会转为9),再拼接中间2位分钟和最后4位毫秒。
    • 7位数字:第1位直接作为小时(本身无前导0),后续截取2位分钟和4位毫秒拼接即可。

测试结果

用你提供的示例数据验证,输出如下:

PROCESS_TIMEFORMATTED_PROCESS_TIME
1015045010:15:0450
20340392:03:4039

完全符合需求格式。

内容的提问来源于stack exchange,提问作者NewJC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:35:10