【问题标题】:MySQL/Postgres Compatible WEEKDAY/DOWMySQL/Postgres 兼容 WEEKDAY/DOW
【发布时间】:2016-10-27 09:35:36
【问题描述】:

我想要一个无需修改即可在 MySQL 和 Postgres 上运行的查询(我正在从 MySQL -> Postgres 迁移,理想情况下,我希望在测试迁移时在两个数据库上运行完全相同的查询,而不是针对不同的数据库查询)。

我原来的 MySQL 查询使用 WEEKDAY:

SELECT WEEKDAY('2016-06-24');
+-----------------------+
| WEEKDAY('2016-06-24') |
+-----------------------+
|                     4 |
+-----------------------+
1 row in set (0.00 sec)

我知道 Postgres 有 EXTRACT,但并不完全相同(并且不适用于 MySQL 上的“dow”):

SELECT EXTRACT(dow FROM '2016-06-24'::date);
date_part 
-----------
     5

是否有一个函数/语句/查询无需修改即可在 MySQL 和 Postgres 上运行且具有 MySQL 上的 WEEKDAY 行为?

我想避免在 Postgres 上为此行为创建自定义函数。

(实际查询使用列等,所以转换应该不是问题)

【问题讨论】:

  • 我对此表示怀疑。如果它们都允许日期减法和相同的模运算符,则可以使用 (date - known_date) % 7。但我不认为他们这样做。

标签: mysql postgresql extract compatibility weekday


【解决方案1】:

我认为没有办法避免用户定义的函数:

create or replace function weekday (_date date)
returns integer as $$
    select extract(isodow from _date)::int - 1;
$$ language sql immutable;

select weekday('2016-06-24');
 weekday 
---------
       4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    相关资源
    最近更新 更多