如何使用 Oracle 在返回查询的最后一个值中添加 30 分钟?



我的查询是

Select class_time from tableA

它产生:

0200AM
0230AM
0300AM
0330AM
0400AM

我想要上面的结果作为

0200AM
0230AM
0300AM
0330AM
0400AM
0430AM

假设您将时间存储在DATE数据类型(始终具有年,月,日,小时,分钟和秒部分(中,则将INTERVAL文本添加到表中的最大值:

SELECT class_time from tableA
UNION ALL
SELECT MAX( class_time ) + INTERVAL '30' MINUTE FROM tableA

或添加一天的一小部分:

SELECT class_time from tableA
UNION ALL
SELECT MAX( class_time ) + 30 / ( 24 /* hours */ * 60 /* minutes */ )  FROM tableA

输出

|CLASS_TIME | |:------------------ | |2019-12-16 02:00:00 | |2019-12-16 02:30:00 | |2019-12-16 03:00:00 | |2019-12-16 03:30:00 | |2019-12-16 04:00:00 | |2019-12-16 04:30:00 |

如果您的时间存储为字符串,请将其转换为日期,添加 30 分钟,然后转换回字符串:

SELECT class_time from tableB
UNION ALL
SELECT TO_CHAR(
MAX( TO_DATE( class_time, 'HH12:MI AM' ) )
+ INTERVAL '30' MINUTE,
'HH12:MI AM'
)
FROM   tableB

输出

|CLASS_TIME | |:--------- | |02:00 上午 | |02:30 上午 | |03:00 上午 | |03:30 上午 | |04:00 上午 | |04:30 上午 |

db<>小提琴在这里

您可以使用 CTE 并union all

with cte as (
<your query here>
)
select time
from cte
union all
select max(time) + interval '30' minute
from cte;

最新更新