Ste*_*ve 80 oracle date-arithmetic
我有一张表如下:
Filename - varchar
Creation Date - Date format dd/mm/yyyy hh24:mi:ss
Oldest cdr date - Date format dd/mm/yyyy hh24:mi:ss
Run Code Online (Sandbox Code Playgroud)
如何计算Oracle SQL中两个日期之间的小时分钟和秒(以及可能的天数)的差异?
谢谢
Thi*_*ilo 111
您可以在Oracle中减去日期.这将给你几天的差异.乘以24得到小时,依此类推.
SQL> select oldest - creation from my_table;
Run Code Online (Sandbox Code Playgroud)
如果您的日期存储为字符数据,则必须先将其转换为日期类型.
SQL> select 24 * (to_date('2009-07-07 22:00', 'YYYY-MM-DD hh24:mi')
- to_date('2009-07-07 19:30', 'YYYY-MM-DD hh24:mi')) diff_hours
from dual;
DIFF_HOURS
----------
2.5
Run Code Online (Sandbox Code Playgroud)
注意:
此答案适用于Oracle数据类型表示的日期DATE
.Oracle还有一种数据类型TIMESTAMP
,它也可以表示日期(随时间).如果你减去TIMESTAMP
价值,你会得到一个INTERVAL
; 要提取数值,请使用该EXTRACT
函数.
Moh*_*ari 15
declare
strTime1 varchar2(50) := '02/08/2013 01:09:42 PM';
strTime2 varchar2(50) := '02/08/2013 11:09:00 PM';
v_date1 date := to_date(strTime1,'DD/MM/YYYY HH:MI:SS PM');
v_date2 date := to_date(strTime2,'DD/MM/YYYY HH:MI:SS PM');
difrence_In_Hours number;
difrence_In_minutes number;
difrence_In_seconds number;
begin
difrence_In_Hours := (v_date2 - v_date1) * 24;
difrence_In_minutes := difrence_In_Hours * 60;
difrence_In_seconds := difrence_In_minutes * 60;
dbms_output.put_line(strTime1);
dbms_output.put_line(strTime2);
dbms_output.put_line('*******');
dbms_output.put_line('difrence_In_Hours : ' || difrence_In_Hours);
dbms_output.put_line('difrence_In_minutes: ' || difrence_In_minutes);
dbms_output.put_line('difrence_In_seconds: ' || difrence_In_seconds);
end ;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
Nik*_*ick 15
要在几秒钟内获得结果:
select (END_DT - START_DT)*60*60*24 from MY_TABLE;
Run Code Online (Sandbox Code Playgroud)
检查[ https://community.oracle.com/thread/2145099?tstart=0][1]
小智 13
select
extract( day from diff ) Days,
extract( hour from diff ) Hours,
extract( minute from diff ) Minutes
from (
select (CAST(creationdate as timestamp) - CAST(oldcreationdate as timestamp)) diff
from [TableName]
);
Run Code Online (Sandbox Code Playgroud)
这将为您提供三列,分别为天,小时和分钟.
您可以使用to_timestamp函数将日期转换为时间戳并执行子操作.
就像是:
SELECT
TO_TIMESTAMP ('13.10.1990 00:00:00','DD.MM.YYYY HH24:MI:SS') -
TO_TIMESTAMP ('01.01.1990:00:10:00','DD.MM.YYYY:HH24:MI:SS')
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
小智 5
计算从HIREDATE到计算机系统日期的年龄
SELECT HIREDATE||' '||SYSDATE||' ' ||
TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12) ||' YEARS '||
TRUNC((MONTHS_BETWEEN(SYSDATE,HIREDATE))-(TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12)*12))||
'MONTHS' AS "AGE " FROM EMP;
Run Code Online (Sandbox Code Playgroud)
您也可以尝试以下方法:
select to_char(to_date('1970-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')+(end_date - start_date),'hh24:mi:ss')
as run_time from some_table;
Run Code Online (Sandbox Code Playgroud)
它以更易理解的形式显示时间,例如:00:01:34。如果您还需要几天的时间,则只需将DD添加到最后一个格式化字符串中即可。