【发布时间】:2018-02-28 20:29:23
【问题描述】:
我正在将 Oracle 数据库迁移到 PostgreSQL,以传输我没有问题的表,但是我无法转录一个函数以使其在 Postgres 中运行,在 Oracle 中找到的函数下方:
create or replace FUNCTION "FN_HOUR_MINUTE" (P_HOUR IN NUMBER)
RETURN NUMBER
IS
-- PL/SQL Specification
V_RETORN NUMBER(4);
-- Convert hour to minute
-- PL/SQL Block
BEGIN
V_RETORN := 60*TO_NUMBER(SUBSTR(LTRIM(TO_CHAR(P_HOUR,'0000'),' ') ,1,2))+
TO_NUMBER(SUBSTR(LTRIM(TO_CHAR(P_HOUR, '0000'),' '), 3,2));
RETURN V_RETORN;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL ;
END;
我尝试在 postgres 中写如下:
CREATE OR REPLACE FUNCTION fn_hour_minute(p_hour in NUMERIC)
RETURNS NUMERIC(4) AS $$
DECLARE
v_retorn NUMERIC(4);
BEGIN
v_retorn := 60*TO_NUMBER(SUBSTR(LTRIM(TO_CHAR(p_hour,'0000'),' ') ,1,2))+
TO_NUMBER(SUBSTR(LTRIM(TO_CHAR(p_hour, '0000'),' '), 3,2));
RETURN v_retorn;
END;
$$ LANGUAGE plpgsql;
但是给出一个错误,说 to_number 函数不存在。
【问题讨论】:
-
试试
TO_NUMBER(SUBSTR(LTRIM(TO_CHAR(p_hour,'0000'),' ') ,1,2), '0000')还有,你为什么要转换成字符然后转换成数字? -
成功了,谢谢。我不太明白他为什么要进行这两次转换,Oracle数据库不是我做的,但是那个功能在那里工作。
标签: sql postgresql plpgsql