如何将DB2中存储的时间格式化为hhmmss

时间:2012-01-30 14:37:09

标签: sql db2

我有时间在Db2 Field中存储为hhmmss(41634)。我想在SQL中将其格式化为HH:MM:SS。我尝试过很多像substr这样的东西 例如:

   select substr(fieldTME,1,1) as HOUR, substr(fieldTME,2,2) as Minute,
substr(fieldTME,4,2) as Second from tbl1 where filed2 ='80404454'

使用上面的sql我可以得到4小时16小时34分钟秒。但是如果时间值存储为(102333)。上面的sql不起作用。我可以在SQL中将小时,分钟和秒格式化为hh:mms:ss

2 个答案:

答案 0 :(得分:3)

首先,应该注意DateTime值应始终存储为这些类型(并且作为Timestamp作为单个字段存储),而不是intchar类型 - 您遇到的麻烦不值得(主要与无效值有关)。

因为@ galador的答案对我的版本(iSeries V6R1)不起作用,所以这里有一个可行的(字符或数字类型)。

SELECT TIME(SUBSTR(RIGHT('0' || fieldTME, 6), 1, 2) || ':' ||
            SUBSTR(RIGHT(fieldTME, 4), 1, 2) || ':' ||
            RIGHT(fieldTME, 2)) AS resultTime  
FROM Tbl1         

答案 1 :(得分:1)

您可能希望稍微规范化数据,以便始终有6位数。您可以使用LPAD()执行此操作(它将使用长度为 x 的字符串字符填充列。 ),然后使用SUBSTR()提取值,就像现在一样:

SELECT  SUBSTR(LPAD(fieldTME, 6, '0'), 1, 2)
        || ':' ||
        SUBSTR(LPAD(fieldTME, 6, '0'), 3, 2)
        || ':' ||
        SUBSTR(LPAD(fieldTME, 6, '0'), 5, 2) 
FROM tbl1
WHERE field2 = '80404454'

如果您确实想要转换为TIME数据类型,可以使用TIME()函数:

SELECT  TIME(SUBSTR(LPAD(fieldTME, 6, '0'), 1, 2)
            || ':' ||
            SUBSTR(LPAD(fieldTME, 6, '0'), 3, 2)
            || ':' ||
            SUBSTR(LPAD(fieldTME, 6, '0'), 5, 2) 
        ) AS time
FROM tbl1
WHERE field2 = '80404454'