Преобразование PGSQL "Создать функцию" в MySQL - PullRequest
0 голосов
/ 22 февраля 2012

Я никогда раньше не работал с pgsql, и я пытаюсь преобразовать эту функцию в Mysql ... Можете помочь?

create or replace function hot(ups integer, downs integer, date timestamp with time zone) returns numeric as $$
select round(cast(log(greatest(abs($1 - $2), 1)) + sign($1 - $2) * (date_part('epoch', $3) - 1134028003) / 45000.0 as numeric), 7) $$ language sql immutable

РЕДАКТИРОВАТЬ:

Пока у меня есть это, но оно все еще дает мне ошибку

create function hot(ups MEDIUMINT, downs MEDIUMINT, date timestamp) returns BIGINT
select round(cast(log(greatest(abs($1 - $2), 1)) + sign($1 - $2) * (unix_timestamp(date) - 1134028003) / 45000.0 BIGINT), 7)
$$ language sql immutable

"У вас есть ошибка в вашем синтаксисе SQL; обратитесь к руководству, соответствующему вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с" BIGINT), 7) $$ language sql immutable "в строке 2"

1 Ответ

1 голос
/ 22 февраля 2012

Это определяет функцию hot(ups, downs, date) (где ups и downs - целые числа, а date - отметка времени с часовым поясом) в качестве этого оператора SQL:

SELECT ROUND( CAST( LOG(GREATEST(ABS(ups - downs), 1))
                    + SIGN(ups - downs) * (DATE_PART('epoch', date) - 1134028003) / 45000.0
                    AS NUMERIC
                  ),
              7
            )
;

$$ ... $$ нотация - это нотация PostgreSQL для многострочной строки (в данном случае содержащая SQL-запрос, определяющий функцию).LANGUAGE SQL указывает, что функция в SQL (и не , например, PL / pgSQL).IMMUTABLE (см. http://www.postgresql.org/docs/8.4/static/sql-createfunction.html) указывает, что функция не изменяет базу данных и всегда возвращает одинаковые результаты для одних и тех же аргументов. (Другими словами, это «чистая» функция.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...