MySQL / Postgres兼容WEEKDAY / DOW

时间:2016-06-24 17:20:42

标签: mysql postgresql extract compatibility weekday

我想要一个无需修改即可在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上为此行为创建自定义函数。

(实际查询使用列等,因此强制转换应该不是问题)

1 个答案:

答案 0 :(得分:2)

我认为没有办法避免用户定义的功能:

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