首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle - hh mm ss to hh:mm:ss

Oracle - hh mm ss to hh:mm:ss
EN

Stack Overflow用户
提问于 2018-12-12 15:53:40
回答 4查看 96关注 0票数 1

我有一个Oracel,它包含两个格式为hhmmss的列。所以221000代表22:10:00。

我想把它变成一个正确的时间格式。问题是有值240000,应该改为235959。此外,省略了前导零。

你知道怎么做吗?

问候

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-12-12 15:58:29

你可以试试:

代码语言:javascript
复制
select replace(to_char(t, '00,00,00'), ',', ':')

这不能处理24:00,但这似乎是一个有效的时间。您可以使用case处理这个问题。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-12-12 15:59:34

您可以使用case表达式显式地处理这个usecase。对于其他字符串,可以将此字符串转换为日期,然后按需要格式化日期:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2018-12-12 16:15:28

假设:

  • 表中有一个VARCHAR列,其中包含yyyymmdd中的日期。
  • 表中有一个包含hh24miss时间的VARCHAR或INT列

你真正应该做的是:

代码语言:javascript
复制
ALTER TABLE ADD proper_date DATETIME;
UPDATE table SET proper_date = TO_DATE(datecol || LPAD(timecol, 6, '0'), 'yyyymmddhh24miss');

如果您的表有一个datetime保存日期,而int或varchar保存该时间:

代码语言:javascript
复制
UPDATE table SET the_date = TO_DATE(TO_CHAR(datecol, 'yyyymmdd') || LPAD(timecol, 6, '0'), 'yyyymmddhh24miss');

然后丢弃分隔的列--在为保存这些东西而设计的数据类型面前,总是一个糟糕的想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53746729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档