如何将 Oracle Next_Day 函数转换为 Postgres SQL?

How to convert Oracle Next_Day Function to Postgres SQL?

有人可以告诉我如何将 Oracle NEXT_DAY 函数转换为 Postgres 吗?

将 Oracle 存储过程转换为 Postgres 函数,在 PGADMIN IV 中执行 Postgres 函数时出现错误,因为它在下面抛出错误 sql ?

SELECT NEXT_DAY(SYSDATE, 'Thursday') FROM DUAL;

如何将上述使用 Oracle 函数 NEXT_DAY 的 Oracle SQL 转换为 Postgres?

也许是这样:

SELECT 'TOMORROW'::date + ( 4 + 7 - extract ( dow FROM 'TOMORROW'::date))::int%7;

4 是星期四的序号

改进上述答案,我想到了这个以防使用一些随机日期。我是 PostgreSQL 的新手,所以它可能不是最好的和优化的。

SELECT '9-APR-2020'::date + COALESCE(NULLIF((4 + 7 - EXTRACT(dow FROM '9-APR-2020'::date))::int%7 , 0 ), 7); 

感谢 Jasen 的逻辑。

我使用他的回答创建了 next_day 函数。

-- converts weekday name to dow i.e. SUN -> 0, MON -> 1, etc.
CREATE OR REPLACE FUNCTION weekdayname_to_dow(weekdayname VARCHAR) RETURNS INT AS
$$
SELECT
  CASE UPPER(weekdayname)
    WHEN 'SUN'
      THEN 0
    WHEN 'MON'
      THEN 1
    WHEN 'TUE'
      THEN 2
    WHEN 'WED'
      THEN 3
    WHEN 'THU'
      THEN 4
    WHEN 'FRI'
      THEN 5
    WHEN 'SAT'
      THEN 6
  END AS ret_val
$$ LANGUAGE SQL;

-- gets a date and finds the date of next desired weekday.
CREATE OR REPLACE FUNCTION next_day(date_input DATE, weekdayname VARCHAR) RETURNS DATE AS
$$
SELECT ::DATE + COALESCE(NULLIF((7 + weekdayname_to_dow() - EXTRACT(DOW FROM ::DATE))::INT % 7, 0), 7) AS result
$$ LANGUAGE sql;