我有一个Oracel,它包含两个格式为hhmmss的列。所以221000代表22:10:00。
我想把它变成一个正确的时间格式。问题是有值240000,应该改为235959。此外,省略了前导零。
你知道怎么做吗?
问候
发布于 2018-12-12 15:58:29
你可以试试:
select replace(to_char(t, '00,00,00'), ',', ':')这不能处理24: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)发布于 2018-12-12 15:59:34
您可以使用case表达式显式地处理这个usecase。对于其他字符串,可以将此字符串转换为日期,然后按需要格式化日期:
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发布于 2018-12-12 16:15:28
假设:
你真正应该做的是:
ALTER TABLE ADD proper_date DATETIME;
UPDATE table SET proper_date = TO_DATE(datecol || LPAD(timecol, 6, '0'), 'yyyymmddhh24miss');如果您的表有一个datetime保存日期,而int或varchar保存该时间:
UPDATE table SET the_date = TO_DATE(TO_CHAR(datecol, 'yyyymmdd') || LPAD(timecol, 6, '0'), 'yyyymmddhh24miss');然后丢弃分隔的列--在为保存这些东西而设计的数据类型面前,总是一个糟糕的想法。
https://stackoverflow.com/questions/53746729
复制相似问题