如何形成oracle函数 - TIMESTAMP输入 -Date Math - Number Return
How to form oracle function - TIMESTAMP input -Date Math - Number Return
我正在尝试创建一个 oracle 函数,该函数采用 TIMESTAMP 输入,计算该时间戳与今天之间的天数,以及 returns 该数字。我没有正确构建它,也不确定如何修复:
create or replace FUNCTION "DAYSSINCEOPENDATE" (OPENDATE IN TIMESTAMP)
RETURN NUMBER
AS
retval NUMBER;
BEGIN
SELECT (SYSDATE - CAST(OPENDATE AS DATE) FROM DUAL)) into retval;
return retval;
END;
感谢任何帮助。谢谢!
正如@Aleksej 在评论中所说,the order of your clauses is incorrect;你需要
SELECT SYSDATE - CAST(OPENDATE AS DATE) into retval FROM DUAL;
所以:
create or replace FUNCTION "DAYSSINCEOPENDATE" (OPENDATE IN TIMESTAMP)
RETURN NUMBER
AS
retval NUMBER;
BEGIN
SELECT SYSDATE - CAST(OPENDATE AS DATE) into retval FROM DUAL;
return retval;
END;
/
select DAYSSINCEOPENDATE(timestamp '2018-01-01 12:13:14.5') from dual;
DAYSSINCEOPENDATE(TIMESTAMP'2018-01-0112:13:14.5')
--------------------------------------------------
204.773368
虽然您实际上并不需要 retval
变量或针对 dual
的查询;你可以将其简化为
create or replace FUNCTION "DAYSSINCEOPENDATE" (OPENDATE IN TIMESTAMP)
RETURN NUMBER
AS
BEGIN
return SYSDATE - CAST(OPENDATE AS DATE);
END;
/
select DAYSSINCEOPENDATE(timestamp '2018-01-01 12:13:14.5') from dual;
DAYSSINCEOPENDATE(TIMESTAMP'2018-01-0112:13:14.5')
--------------------------------------------------
204.773368
我正在尝试创建一个 oracle 函数,该函数采用 TIMESTAMP 输入,计算该时间戳与今天之间的天数,以及 returns 该数字。我没有正确构建它,也不确定如何修复:
create or replace FUNCTION "DAYSSINCEOPENDATE" (OPENDATE IN TIMESTAMP)
RETURN NUMBER
AS
retval NUMBER;
BEGIN
SELECT (SYSDATE - CAST(OPENDATE AS DATE) FROM DUAL)) into retval;
return retval;
END;
感谢任何帮助。谢谢!
正如@Aleksej 在评论中所说,the order of your clauses is incorrect;你需要
SELECT SYSDATE - CAST(OPENDATE AS DATE) into retval FROM DUAL;
所以:
create or replace FUNCTION "DAYSSINCEOPENDATE" (OPENDATE IN TIMESTAMP)
RETURN NUMBER
AS
retval NUMBER;
BEGIN
SELECT SYSDATE - CAST(OPENDATE AS DATE) into retval FROM DUAL;
return retval;
END;
/
select DAYSSINCEOPENDATE(timestamp '2018-01-01 12:13:14.5') from dual;
DAYSSINCEOPENDATE(TIMESTAMP'2018-01-0112:13:14.5')
--------------------------------------------------
204.773368
虽然您实际上并不需要 retval
变量或针对 dual
的查询;你可以将其简化为
create or replace FUNCTION "DAYSSINCEOPENDATE" (OPENDATE IN TIMESTAMP)
RETURN NUMBER
AS
BEGIN
return SYSDATE - CAST(OPENDATE AS DATE);
END;
/
select DAYSSINCEOPENDATE(timestamp '2018-01-01 12:13:14.5') from dual;
DAYSSINCEOPENDATE(TIMESTAMP'2018-01-0112:13:14.5')
--------------------------------------------------
204.773368