如何将 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;
有人可以告诉我如何将 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;