我之前从未使用过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”
答案 0 :(得分:1)
这定义函数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)表示该函数不修改数据库,并且始终为相同的参数返回相同的结果。 (换句话说,它是一个“纯粹的”功能。)
round
,log
,abs
和sign
的信息,请参阅http://www.postgresql.org/docs/8.4/static/functions-math.html。CAST(... AS NUMERIC)
将其参数作为数字返回(例如,CAST('123' AS NUMERIC)
为123
)。greatest
的信息,请参阅http://www.postgresql.org/docs/8.4/static/functions-conditional.html。DATE_PART('epoch', ...)
将其参数(日期)作为自1970-01-01 00:00:00.000 GMT
以来的秒数返回。