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

Postgres无时区环境下将军用时间整数转换为标准时间的实现问询

PostgreSQL 整数型军事时间列转换为12小时制带am/pm格式方案

核心实现逻辑

直接通过3层函数嵌套完成转换,无需额外自定义函数:

  1. 先将整数转为4位字符串,左侧补0对齐,解决短位数的补位需求
  2. 按HH24MI格式将补位后的字符串转为时间类型
  3. 通过格式化函数输出12小时制带am/pm的目标样式

完整SQL语句

SELECT 
  TO_CHAR(
    TO_TIMESTAMP(LPAD(military_time::TEXT, 4, '0'), 'HH24MI')::TIME,
    'FMHH12:MI am'
  ) AS formatted_time
FROM 你的表名;

函数说明

  • LPAD(military_time::TEXT, 4, '0'):将整数转为字符串后,左侧补0直到长度为4,比如数值25会转为0025,数值900会转为0900
  • TO_TIMESTAMP(..., 'HH24MI')::TIME:将4位字符串按24小时制的时分格式解析为时间类型
  • TO_CHAR(..., 'FMHH12:MI am'):将时间格式化为12小时制样式,FM前缀会自动去掉数值前的多余空格,避免出现 9:00 am这类前面带空格的结果

示例验证

对应给出的测试数值,转换结果完全匹配需求:

  • 输入1400 → 输出2:00 pm
  • 输入1300 → 输出1:00 pm
  • 输入25 → 输出12:25 am
  • 输入900(整数存储时会自动去掉前导0,对应提到的0900) → 输出9:00 am

注意事项

如果你的military_time列存在超过合理时间范围的无效值(比如大于2359的数值),可以增加过滤条件避免解析报错:

SELECT 
  TO_CHAR(
    TO_TIMESTAMP(LPAD(military_time::TEXT, 4, '0'), 'HH24MI')::TIME,
    'FMHH12:MI am'
  ) AS formatted_time
FROM 你的表名
WHERE military_time BETWEEN 0 AND 2359;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:51:01