我有以下查询,在Oracle中运行良好:
SELECT TRUNC(CURRENT_DATE, 'MM') + LEVEL - 1 AS MYDATE FROM DUAL CONNECT BY LEVEL <= EXTRACT(DAY FROM LAST_DAY(CURRENT_DATE));
此查询返回一个包含当前月份所有天数的列表。
问题是我需要这个查询也能在H2中工作,但H2不支持LEVEL
或TRUNC
或CONNECT BY
。因此,我如何重写查询,使其同时适用于Oracle和H2?
2条答案
按热度按时间ef1yzkbh1#
您可以在Oracle和H2中使用以下查询:
但是如果你可以使用不同的查询,最好使用H2:
(In在H2的未来版本中,将可能使用更简单的查询。
klh5stk12#
我如何重写查询,使它与Oracle和H2一起工作?
比较Oracle和H2 functions:
TRUNC
,H2支持DATE_TRUNC
LAST_DAY
,而H2不支持。H2似乎支持函数
EXTRACT
和CAST
,如果它支持递归查询,那么你可以只使用这些函数编写一些东西(但这并不好):或者,如果H2不支持将数字添加到日期中,则可以使用
INTERVAL
s:这两个输出:
| DAY |
| ------------ |
| 2023-06-01 00:00:00 |
| 2023-06-02 00:00:00 |
| 2023-06-03 00:00:00 |
| ... |
| 2023-06-29 00:00:00 |
| 2023-06-30 00:00:00 |
我没有访问H2示例的权限来测试它是否在RDBMS上工作。
但是,您可能会发现为每个数据库编写不同的代码比尝试重用相同的代码更简单。
fiddle