我有时间在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
答案 0 :(得分:3)
首先,应该注意Date
和Time
值应始终存储为这些类型(并且作为Timestamp
,不作为单个字段存储),而不是int
或char
类型 - 您遇到的麻烦不值得(主要与无效值有关)。
因为@ 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'