我有一个Oracel数据库,其中包含两列,格式为hhmmss。所以221000代表22:10:00。
我想将其设置为正确的时间格式。问题在于存在值240000,应将其更改为235959。此外,省略了前导零。
有人知道该怎么做吗?
问候
答案 0 :(得分:1)
您可以尝试:
select replace(to_char(t, '00,00,00'), ',', ':')
这不处理24:00:00,但这似乎是一个有效时间。您可以使用case
处理此问题:
select (case when t = 240000 then '23:59:59' -- I would use '00:00:00'
else replace(to_char(t, '00,00,00'), ',', ':')
end)
答案 1 :(得分:0)
您可以使用case
表达式来显式处理该用例。对于其他用户,您可以将此字符串转换为日期,然后按以下方式格式化日期:
SELECT CASE col
WHEN '240000' THEN '23:59:59'
ELSE TO_CHAR(TO_DATE(LPAD(col, 6, '0'), 'hh24miss'), 'hh24:mi:ss')
ENDi
FROM mytable
答案 2 :(得分:0)
假设:
您真正应该做的:
ALTER TABLE ADD proper_date DATETIME;
UPDATE table SET proper_date = TO_DATE(datecol || LPAD(timecol, 6, '0'), 'yyyymmddhh24miss');
如果表中有一个保存日期的日期时间,和一个有时间的int或varchar值:
UPDATE table SET the_date = TO_DATE(TO_CHAR(datecol, 'yyyymmdd') || LPAD(timecol, 6, '0'), 'yyyymmddhh24miss');
然后放置分隔的列-面对旨在容纳这些内容的数据类型,这总是一个糟糕的主意
答案 3 :(得分:0)
最简单的方法可能是将小时数与分钟和秒分别转换,如下所示:
to_date(substr(t,-4),'miss') + to_number(substr(t,1,length(t)-4))/24
要注意的一个关键事实是,对于小时数> = 24的情况,结果日期将比那些小时数较少的时间晚一天或更长时间,因此从240000中减去转换后的值230000将导致一小时的差异,因为必填。