我以前从未使用过 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 服务器版本相对应的手册,了解在第 2 行 'BIGINT), 7) $$ language sql immutable' 附近使用的正确语法”
最佳答案
定义了函数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
以来的秒数.
关于mysql - 将 PGSQL "Create Function"转换为 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9396695/