2016-06-24 32 views
1

我想,關於MySQL和Postgres的運行,而無需修改(我從MySQL遷移查詢 - > Postgres的,理想的,我想在這兩個數據庫上運行完全相同的查詢,同時測試遷移而不是特定於數據庫的不同查詢)。的MySQL/Postgres的兼容工作日/ DOW

我原來的MySQL查詢使用WEEKDAY:

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

我知道Postgres有EXTRACT但它是不完全一樣(並且不與MySQL的 '道' 工作):

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

是否有一個函數/語句/查詢在沒有修改的MySQL和Postgres上運行,在MySQL上具有WEEKDAY行爲?

我想避免這種行爲創建的Postgres上的自定義功能。

(實際查詢使用列等等所以蒙上不應該是一個問題)

+0

我對此表示懷疑。你可以使用'(date - known_date)%7',如果它們都允許日期減法和相同的模數運算符。但我認爲他們沒有。 – shawnt00

回答

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