我的查询是
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;