将PGSQL“创建函数”转换为MySQL

时间:2012-02-22 14:28:05

标签: mysql function

我之前从未使用过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'at line 2”

1 个答案:

答案 0 :(得分:1)

这定义函数hot(ups, downs, date)(其中upsdowns是整数,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)表示该函数不修改数据库,并且始终为相同的参数返回相同的结果。 (换句话说,它是一个“纯粹的”功能。)