HH:MI:SS字符串返回秒数



我正在尝试创建一个过程,该过程接受'HH:MI:SS'格式的字符串,并返回秒数。

我想从字符串中解析出小时数,分钟数和秒数,并返回传入值的秒数。

过程创建成功,但当我尝试调用它时,我得到一个错误。谁能告诉我如何解决这个问题?

提前感谢所有回答的人。

CREATE OR REPLACE PROCEDURE CONVERT_TO_SECONDS( 
i_date_string IN VARCHAR2,
o_seconds      OUT PLS_INTEGER 
)
AS
l_hours      NUMBER;
l_minutes  NUMBER;
l_seconds  NUMBER;
BEGIN
SELECT trim('"'
FROM regexp_substr(i_date_string,'".*?"|[^:]+',1,1)) hours,
trim('"'
FROM regexp_substr(i_date_string,'".*?"|[^:]+',1,2)) minutes,
trim('"'
FROM regexp_substr(i_date_string,'".*?"|[^:]+',1,3)) seconds
INTO l_hours ,
l_minutes ,
l_seconds
FROM dual ;
o_seconds := 
l_hours*3600 +  
l_minutes*60 +
l_seconds;
END;
SELECT CONVERT_TO_SECONDS('08:08:08') FROM DUAL;

你不能select程序SQL语句中的。您可以选择函数。显然,您必须创建一个函数,而不是一个过程——一个返回整数的函数。

这可能看起来像这样。这仍然可以改进,但我认为这是为了练习/学习的目的。(例如,不清楚为什么需要在代码中使用双引号。)我只做了最小的所需的更改使其工作。我会让你找出这和你的尝试的不同之处。

CREATE OR REPLACE FUNCTION CONVERT_TO_SECONDS( 
i_date_string IN VARCHAR2 
)
RETURN INTEGER            
AS
l_hours      NUMBER;
l_minutes  NUMBER;
l_seconds  NUMBER;
BEGIN
SELECT trim('"'
FROM regexp_substr(i_date_string,'".*?"|[^:]+',1,1)) hours,
trim('"'
FROM regexp_substr(i_date_string,'".*?"|[^:]+',1,2)) minutes,
trim('"'
FROM regexp_substr(i_date_string,'".*?"|[^:]+',1,3)) seconds
INTO l_hours ,
l_minutes ,
l_seconds
FROM dual ;
return
l_hours*3600 +  
l_minutes*60 +
l_seconds;

END;
/
Function CONVERT_TO_SECONDS compiled

SELECT CONVERT_TO_SECONDS('08:08:08') FROM DUAL;
CONVERT_TO_SECONDS('08:08:08')
------------------------------
29288

对于正则表达式不要这样做。使用Oracle内置的日期转换函数

SELECT TO_CHAR( TO_DATE('12:34:56','HH24:MI:SS'), 'sssss') FROM dual;

下面是一些带有示例的链接:

  • https://nimishgarg.blogspot.com/2014/10/oracle-convert-time-hhmiss-to-seconds.html
  • https://www.complexsql.com/how-to-convert-time-to-seconds-in-oracle-with-examples/
  • https://www.oracletutorial.com/oracle-date-functions/

最后,如果你告诉我们"我得到一个错误"然后你需要告诉我们误差是什么。总是总是总是切& &;粘贴你得到的准确的错误。实际的错误信息是调试问题最重要的工具。

最新更新