【问题标题】:Convert DB2 SQL Decimal to time将 DB2 SQL 十进制转换为时间
【发布时间】:2018-06-28 10:11:14
【问题描述】:

将 DB2 SQL 十进制转换为时间 我需要将十进制转换为时间。我有一个十进制时间字段,其中包含这样的数据:

123490 --12:34:90
4506 --00:45:06
171205 --17:12:05

我想转换成时间格式然后我计算两个时间列之间的最小值

在 select 语句中是否可以使用 SQL 命令或 DB2 逻辑来执行此操作?

【问题讨论】:

  • 3600*(dectime/10000) + 60*MOD(dectime/100,100) + MOD(dectime,100) 将十进制时间转换为秒。

标签: sql db2


【解决方案1】:

要将其转换为有效的时间格式,您必须进行一些字符串操作,例如

cast( substr( right( '00' || '123456', 6) ,1,2) || ':' || substr( right( '00' || '123456', 6) ,3,2) || ':' || substr( right( '00' || '123456', 6) ,5,2) as time)

其中 123456 是您的小数点。这也适用于您的 4506 示例。 如果您想避免每次都添加“00”,您当然也可以使用 case 语句。

为了计算以分钟为单位的差异,可能还有其他计算选项。 您可以查看minutes_between function provided by Db2 11.1

【讨论】:

  • 不客气 - 如果你得到只有两个数字的 tinmes,比如 00:0:41,你只需要添加四个 0 而不是两个。
  • 先生,我有 4 列的十进制日期 ||时间 ||约会 ||超时 20180501 || 093012 || 20180501 || 103012 20180501 || 233013 || 20180502 || 042012 如何计算分钟数
  • 哪个操作系统和哪个版本?
【解决方案2】:

您可以使用TO_DATE,它是TIMESTAMP_FORMAT 的缩写,但您首先需要将十进制转换为字符串。

select time(to_date(digits(cast(143513 as dec(6,0))),'HH24MISS')) from sysibm.sysdummy1
  • cast 只是用来模拟 6 位小数
  • digits 将十进制转换为字符,并用零填充
  • to_date 根据格式字符串将字符串转换为时间戳。 TIMESTAMP_FORMAT
  • time 返回时间戳的时间部分

这是基于 iSeries 版本的 DB2,但也应该适用于 LUW。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-24
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 2015-03-12
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多