months_between替换postgre
时间: 2023-05-26 12:05:24 浏览: 145
在PostgreSQL中,可以使用以下查询替代Oracle的MONTHS_BETWEEN函数:
SELECT ROUND(EXTRACT(EPOCH FROM (date1 - date2)) / (30.44 * 24 * 60 * 60)) FROM table;
其中date1和date2是要比较的日期。这将返回两个日期之间的月数。请注意,这可能会产生一些舍入误差。
此外,可以创建一个等效的PostgreSQL函数:
CREATE FUNCTION months_between(date1 timestamp, date2 timestamp) RETURNS integer AS
$$
BEGIN
RETURN ROUND(EXTRACT(EPOCH FROM (date1 - date2)) / (30.44 * 24 * 60 * 60));
END;
$$
LANGUAGE plpgsql;
然后可以像这样使用它:
SELECT months_between(date1, date2) FROM table;
相关问题
ADD_MONTHS替换postgre
在PostgreSQL中,可以使用DATE_TRUNC函数和INTERVAL表达式来替代Oracle中的ADD_MONTHS函数。
例如,假设我们想在当前日期的基础上添加3个月,我们可以使用以下查询:
```
SELECT DATE_TRUNC('month', NOW()) + INTERVAL '3 months';
```
这里,DATE_TRUNC函数返回当前月份的第一天,然后使用INTERVAL表达式添加3个月。
如果我们想在特定日期的基础上添加n个月,我们可以使用以下查询:
```
SELECT DATE_TRUNC('month', '2019-01-15'::date) + INTERVAL '6 months';
```
这里,我们传递了一个日期('2019-01-15'),并使用DATE_TRUNC函数将其截断为月份的第一天。然后,我们使用INTERVAL表达式添加6个月。
请注意,这里的INTERVAL表达式应该是一个字符串,以单引号括起来,并带有一个空格。在PostgreSQL中,INTERVAL表达式需要使用单引号。
SELECT TO_CHAR(ADD_MONTHS(ADD_MONTHS(sysdate, -24), ROWNUM - 1), 'YYYYMM') UNIT_DATE FROM DUAL CONNECT BY ROWNUM <= months_between(sysdate, ADD_MONTHS(sysdate, -24)) 替换成postgre
SELECT to_char(date_trunc('month', (CURRENT_DATE - interval '2 year')::timestamp) + (generate_series(0, date_part('year', age(CURRENT_DATE, (CURRENT_DATE - interval '2 year'))::interval) * 12 + date_part('month', age(CURRENT_DATE, (CURRENT_DATE - interval '2 year'))::interval)) * interval '1 month'), 'YYYYMM') AS UNIT_DATE FROM generate_series(0, date_part('year', age(CURRENT_DATE, (CURRENT_DATE - interval '2 year'))::interval) * 12 + date_part('month', age(CURRENT_DATE, (CURRENT_DATE - interval '2 year'))::interval)) AS t;
阅读全文