Oracle SQL:如何将HH24:MI:SS显示为“小时:#,分钟#,秒#”?

时间:2016-04-08 11:57:43

标签: sql oracle date time

标题说明了一切,我想要

19:33:25 

显示为

Hours: 19, Minutes: 33, Seconds: 25

这是我过去19:33:25的查询,基本上是转换为字符串的日期。

TO_CHAR(TO_DATE(24 * 60 * 60 * (a.dateEnd - SYSDATE),'sssss'),'hh24:mi:ss')

这样的事情可能吗?

感谢您的任何意见!

3 个答案:

答案 0 :(得分:4)

您可以使用EXTRACT(... from DATE)函数,但由于您需要固定字符串输出,因此您可以使用TO_CHAR执行相同操作。字符串格式的所有固定部分都可以用双引号括起来,这就像 -

select TO_CHAR(sysdate, '"Hours: "hh", Minutes: "mi" Seconds: "ss') from dual;

答案 1 :(得分:0)

假设您必须从字符串值开始,您可以尝试使用一些正则表达式:

with test(txt) as ( select '19:33:25' from dual)
select regexp_replace(txt, '([0-9]{2,2}):([0-9]{2,2}):([0-9]{2,2})', 'Hours:\1, Minutes: \2, Seconds: \3')
from test

这匹配起始字符串中的数字并使用它们来构建包含一些固定文本的新字符串('Hours:',...)和匹配的字符串

答案 2 :(得分:0)

您可以提取单个字段:

SELECT
    EXTRACT(HOUR FROM (a.dateEnd - SYSDATE)) AS HOUR,
    EXTRACT(MINUTE FROM (a.dateEnd - SYSDATE)) AS MINUTE,
    EXTRACT(SECOND FROM (a.dateEnd - SYSDATE)) AS SECOND
FROM a
WHERE ...

如果您希望将其放在包含文本的单个列中,则可以使用CONCAT:

SELECT CONCAT('Hours: ' || EXTRACT(HOUR FROM (a.dateEnd - SYSDATE)) ||
              ' Minutes: ' EXTRACT(MINUTE FROM (a.dateEnd - SYSDATE)) ||
              ' Seconds: ' EXTRACT(SECOND FROM (a.dateEnd - SYSDATE))
             ) AS time_string
FROM a
WHERE ...