Pervasive SQL中将秒数转换为hh:mm:ss时间格式的问题求助
解决Pervasive SQL中将流逝秒数转为hh:mm:ss格式的问题
问题原因分析
- DATEADD参数顺序错误:你之前的
DATEADD语句参数顺序颠倒,PSQL的DATEADD语法是DATEADD(interval, 增量值, 基准日期),而非你写的DATEADD(second, 0, [time_field])。 - 字符串拼接运算符错误:MS SQL用
+拼接字符串,但PSQL中+是数值加法,字符串拼接需用||,这是你拼接语句得到异常结果的核心原因。 - 类型转换问题:若字段不是数值类型,需先转为整数再计算,避免非预期的类型转换。
可行解决方案
方案1:使用DATEADD+CONVERT
修正DATEADD参数顺序,将秒数加到PSQL的基准日期(0001-01-01)上,再转换为hh:mm:ss格式的字符串:
CONVERT(DATEADD(second, [time_field], '0001-01-01'), SQL_VARCHAR, 108)
注:若[time_field]为86400(24小时),该语句会返回00:00:00,符合午夜的时间表示;若需保留24:00:00,建议用方案2。
方案2:数值计算+字符串拼接
使用整数除法、取模运算结合||拼接字符串,确保格式正确:
RIGHT('00' || CONVERT(CAST([time_field] AS INT) / 3600, SQL_VARCHAR), 2) || ':' || RIGHT('00' || CONVERT((CAST([time_field] AS INT) % 3600) / 60, SQL_VARCHAR), 2) || ':' || RIGHT('00' || CONVERT(CAST([time_field] AS INT) % 60, SQL_VARCHAR), 2)
- 先将字段转为整数(若字段本身是数值类型可省略
CAST),避免类型转换错误; - 用
||替代+做字符串拼接; - 通过
RIGHT('00' || ..., 2)确保小时、分钟、秒都是两位格式,不足补零。
测试验证
针对输入值51714秒,方案2会计算出:
- 小时:51714 / 3600 = 14
- 分钟:(51714 % 3600) / 60 = 11
- 秒:51714 % 60 = 54
最终返回14:11:54,符合预期格式。
内容的提问来源于stack exchange,提问作者wis3_0
相关产品推荐
相关产品推荐

