【发布时间】:2018-06-17 17:45:19
【问题描述】:
我在 Oracle 数据库中工作,我正在尝试将 12 小时转换为 24 小时。
我目前已将 HH 更新为 HH24,我仍然看到完整的 24 小时时间,实际上它只是拉动一天的前 12 小时。以下是我的工作查询,除了其他缺少的 12 小时外,没有错误并输出正确的结果。
SELECT
CASE(EXTRACT(HOUR FROM a.TIME))
WHEN 1 THEN '1'
WHEN 2 THEN '2'
WHEN 3 THEN '3'
WHEN 4 THEN '4'
WHEN 5 THEN '5'
WHEN 6 THEN '6'
WHEN 7 THEN '7'
WHEN 8 THEN '8'
WHEN 9 THEN '9'
WHEN 10 THEN '10'
WHEN 11 THEN '11'
WHEN 12 THEN '12'
WHEN 13 THEN '13'
WHEN 14 THEN '14'
WHEN 15 THEN '15'
WHEN 16 THEN '16'
WHEN 17 THEN '17'
WHEN 18 THEN '18'
WHEN 19 THEN '19'
WHEN 20 THEN '20'
WHEN 21 THEN '21'
WHEN 22 THEN '22'
WHEN 23 THEN '23'
WHEN 24 THEN '24'
ELSE 'OTHERS' END AS "ENTRY_TIME_HOUR",
COUNT(*) AS "TOTAL_WITHIN_THE_HOUR"
FROM Table1 a
WHERE
a.TIME >= TO_DATE('2018/01/05 01:00:01', 'YYYY/MM/DD HH24:MI:SS')
AND a.TIME <= TO_DATE('2018/01/05 12:59:59', 'YYYY/MM/DD HH24:MI:SS')
GROUP BY EXTRACT(HOUR FROM a.TIME)
上面的查询会输出类似下面的内容,但最多只能输出 12 个(应该是 1-24)
ENTRY_TIME_HOUR TOTAL_WITHIN_THE_HOUR
11 68
8 3
9 83
10 26
12 62
此外,我发现 TO_CHAR 很有用,但我无法同时运行 TO_CHAR 和 TO_DATE。最终目标是对给定时间的 TIME 上的所有输出求和。输出将返回 24 行,每个小时的总计数。
以下是输出完整时间(不仅仅是小时 HH)的单独查询:
SELECT
to_char(a.TIME, 'DD/MM/YYYY HH24:MI:SS') AS "TIME in 24"
FROM TABLE a
WHERE
AND a.TIME >= TO_DATE('2018/01/05 01:00:01', 'YYYY/MM/DD HH24:MI:SS')
AND a.TIME <= TO_DATE('2018/01/05 23:59:59', 'YYYY/MM/DD HH24:MI:SS')
上述查询将提供如下内容:
05/01/2018 15:00:40
05/01/2018 16:01:45
05/01/2018 09:59:51
05/01/2018 10:04:58
但是,我无法在不遇到多个问题的情况下将 TO_CHAR 和 TO_DATE 查询合并在一起。是否可以将第二个查询与第一个查询合并,以提供全天 24 小时的小时计数结果?
谢谢
【问题讨论】:
-
除了 Gordon 指出的过滤器问题之外,提取小时将为您提供 0-23,而不是 1-24。 (你的
elseexpected to catch - null 值是什么?) -
谢谢!是的,我希望捕捉到 NULL 值,这很可能不会是任何值。
-
Null 值会被过滤器排除在外吗?而且您的第二个版本仍然排除 00:00:00 和 01:00:00 之间的值,如果您期望所有时间都有结果,这可能不是您想要的。
标签: sql oracle to-date to-char