2016-09-18 75 views
0

我有一個MySQL平臺特定的查詢:如何將mysql平臺特定的查詢轉換爲非平臺特定的?

SELECT month(from_unixtime(s.date)) AS month, count(s.id) AS blah, s.status 
    FROM Something s 
    WHERE s.date between unix_timestamp($blah1) and unix_timestamp($blah2) 
    GROUP BY s.status, month 

我用像monthfrom_unixtimeunix_timestamp一些MySQL的平臺專用命令。 如何重新編寫這個查詢,使其跨平臺兼容,它也適用於Postgres呢?

+1

答:是的,你可以! – wildplasser

+0

請不要評論垃圾評論!我問如何重新編寫查詢。 – user4271704

+0

順便說一句:'在unix_timestamp($ blah)和unix_timestamp($ blah)之間的s.date'是完全無稽之談,即使在mysql中也是如此。 ('WHERE s.date = unix_timestamp($ blah)'會做同樣的事) – wildplasser

回答

1

假設你在列date存儲「Unix時間戳」值,下面應該工作:

SELECT extract(month from to_timestamp(s.date)) AS month, 
     count(s.id) AS blah, 
     s.status 
FROM Something s 
WHERE s.date between to_timestamp($blah1) and to_timestamp($blah2) 
GROUP BY s.status, month 

to_timestamp()用雙(或整數)參數,Unix時間戳轉換成適當的時間戳。

然而真正的問題是:爲什麼不使用正確的timestamp數據類型?

+0

我使用Linux時間戳與PHP的時間()。這不是一個適當的時間戳嗎?恰當的時間戳是什麼意思?你的意思是date()? – user4271704

+0

請給出適當時間戳的樣本格式,它看起來如何? – user4271704

+0

to_timestamp和extract和month是postgres平臺特定的? – user4271704