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

关于在Progress SQL中将整数时间转换为HH:MM:SS::00格式及整数时间戳字段转VARCHAR的技术咨询

嘿,Juliano!针对你提到的两个需求——把Progress数据库的整数字段nrHoraRegistro转换为VARCHAR类型,以及将该整数时间值格式化为HH:MM:SS::00,我整理了可行的SQL方案,一起来看看:

一、将整数字段nrHoraRegistro转换为VARCHAR类型

在Progress SQL中修改字段类型,操作前务必备份数据避免意外丢失,具体方案分两种场景:

  • 直接修改字段类型(适合数据量小、无需额外处理的情况):

    ALTER TABLE 你的表名
    ALTER COLUMN nrHoraRegistro VARCHAR(20); -- 长度可根据实际需求调整,比如存HHMMSS格式的话8位足够
    

    Progress会自动完成整数到字符串的隐式转换,原有数值会直接转为对应字符串。

  • 分步转换(适合需要确保数据准确性、或有特殊格式要求的场景):

    -- 1. 新增临时VARCHAR字段
    ALTER TABLE 你的表名
    ADD COLUMN temp_nrHoraRegistro VARCHAR(20);
    
    -- 2. 将原整数字段数据转换为字符串存入临时字段
    UPDATE 你的表名
    SET temp_nrHoraRegistro = CAST(nrHoraRegistro AS VARCHAR(20));
    
    -- 3. 删除原整数字段
    ALTER TABLE 你的表名
    DROP COLUMN nrHoraRegistro;
    
    -- 4. 将临时字段重命名为原字段名
    ALTER TABLE 你的表名
    RENAME COLUMN temp_nrHoraRegistro TO nrHoraRegistro;
    
二、将整数时间值转换为HH:MM:SS::00格式

这里需要根据你的整数时间戳存储规则选择对应方案,常见两种场景如下:

情况1:整数是HHMMSS格式的数字(比如134520代表13:45:20)

我们可以先将整数转为字符串,拆分出小时、分钟、秒后拼接成目标格式:

SELECT
  nrHoraRegistro,
  CONCAT(
    SUBSTRING(LPAD(CAST(nrHoraRegistro AS VARCHAR(6)), 6, '0'), 1, 2), ':',
    SUBSTRING(LPAD(CAST(nrHoraRegistro AS VARCHAR(6)), 6, '0'), 3, 2), ':',
    SUBSTRING(LPAD(CAST(nrHoraRegistro AS VARCHAR(6)), 6, '0'), 5, 2), '::00'
  ) AS formatted_time
FROM 你的表名;

其中LPAD函数用于补前导零,确保不足6位的整数(比如930代表00:09:30)也能生成标准格式。

情况2:整数是从某个时间点开始的总秒数(比如49520代表13小时45分20秒)

这种情况需要通过计算拆分出小时、分钟、秒:

SELECT
  nrHoraRegistro,
  CONCAT(
    LPAD(CAST(FLOOR(nrHoraRegistro / 3600) AS VARCHAR(2)), 2, '0'), ':',
    LPAD(CAST(FLOOR((nrHoraRegistro % 3600) / 60) AS VARCHAR(2)), 2, '0'), ':',
    LPAD(CAST(nrHoraRegistro % 60 AS VARCHAR(2)), 2, '0'), '::00'
  ) AS formatted_time
FROM 你的表名;

如果字段已经转为VARCHAR类型,只需在计算前先转回整数:

SELECT
  nrHoraRegistro,
  CONCAT(
    LPAD(CAST(FLOOR(CAST(nrHoraRegistro AS INT) / 3600) AS VARCHAR(2)), 2, '0'), ':',
    LPAD(CAST(FLOOR((CAST(nrHoraRegistro AS INT) % 3600) / 60) AS VARCHAR(2)), 2, '0'), ':',
    LPAD(CAST(CAST(nrHoraRegistro AS INT) % 60 AS VARCHAR(2)), 2, '0'), '::00'
  ) AS formatted_time
FROM 你的表名;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:27:33