2012-02-22 10 views
0

私はこれまでにpgsqlを使ったことがなく、この関数をMysqlに変換しようとしています...私に手を差し伸べることはできますか?PGSQLの "Create Function"を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 

EDIT:

あなたのSQL構文でエラーが発生している」これまでのところ、私はこれを持っているが、それはまだ私にエラー

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 

を与える;に対応マニュアルをご確認くださいあなたのMySQLサーバのバージョンは、 'BIGINT'の近くで使用するために)、7)$$ language sqlは2行目で不変です。

+1

$$ language sql immutableは、完全に間違っています。 –

+0

[mysqlバージョンのreddit pgsql hotness関数]の複製が可能です。(http://stackoverflow.com/questions/9352696/mysql-version-of-reddit -pgsql-hotness-function) –

答えて

1

これは、関数hot(ups, downs, date)を定義しています(ここではupsdownsは整数であり、dateこのSQL文とタイムスタンプとの時間帯)である:SQLクエリを含む、この場合

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

$$ ... $$表記は、複数行の文字列のためのPostgreSQLの表記法である(すなわち関数を定義する)。 LANGUAGE SQLは、その関数がSQLであることを示します(また、ではなく、、たとえばPL/pgSQL)。 IMMUTABLEhttp://www.postgresql.org/docs/8.4/static/sql-createfunction.html参照)は、関数がデータベースを変更せず、常に同じ引数に対して同じ結果を返すことを示します。 (言い換えれば、それは "純粋な" 機能です。)roundlogabs、およびsignの詳細については

+0

ruakhに感謝します。私はそれを調べます。 – CodeIO