2016-09-18 2 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 

я использовал некоторые конкретные команды платформы MySQL, как month, from_unixtime и unix_timestamp. Как я могу переписать этот запрос, чтобы сделать его кросс-платформенным, совместимым с Postgres?

+1

Ответ: Да, вы можете! – wildplasser

+0

Пожалуйста, не спам комментариев! Я спросил, как перезаписать запрос. – user4271704

+0

BTW: 'WHERE s.date между unix_timestamp ($ blah) и unix_timestamp ($ blah)' - полная бессмыслица, даже в mysql. ('WHERE s.date = unix_timestamp ($ blah)' будет делать то же самое) – wildplasser

ответ

1

Предполагая, что вы хранение «UNIX эпоху» значение в столбце date, следующий должны работать:

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(). Разве это не правильная метка времени? Что именно вы подразумеваете под правильной меткой времени? Вы имеете в виду дату()? – user4271704

+0

Пожалуйста, укажите пример правильной временной метки, как это выглядит? – user4271704

+0

to_timestamp и экстракт и месяц - это специальная платформа postgres? – user4271704

Смежные вопросы