Oracle SQL에서 두 날짜/시간 차이를 계산합니다.
다음과 같은 테이블이 있습니다.
Filename - varchar
Creation Date - Date format dd/mm/yyyy hh24:mi:ss
Oldest cdr date - Date format dd/mm/yyyy hh24:mi:ss
Oracle SQL에서 두 날짜 간의 시간 및 초(및 가능한 일) 차이를 계산하려면 어떻게 해야 합니까?
감사해요.
Oracle에서 날짜를 추출할 수 있습니다.이렇게 하면 일수가 달라집니다.24를 곱하면 시간이 나오는 식입니다.
SQL> select oldest - creation from my_table;
날짜가 문자 데이터로 저장된 경우 먼저 날짜 유형으로 변환해야 합니다.
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
주의:
이 답변은 Oracle 데이터 유형으로 표시되는 날짜에 적용됩니다.DATE
Oracle에는 데이터 유형도 있습니다.TIMESTAMP
날짜(시간 포함)를 나타낼 수도 있습니다.뺄셈을 하면TIMESTAMP
값, 즉INTERVAL
; 숫자 값을 추출하려면EXTRACT
기능.
초단위로 결과를 얻으려면:
select (END_DT - START_DT)*60*60*24 from MY_TABLE;
[https://community.oracle.com/thread/2145099?tstart=0][1] 체크
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 ;
이게 도움이 됐으면 좋겠다.
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]
);
이렇게 하면 일, 시간 및 분으로 세 개의 열이 표시됩니다.
다음과 같은 방법도 있습니다.
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;
00:01:34와 같이 사람이 읽을 수 있는 형태로 시간을 표시합니다.또한 일수가 필요한 경우 마지막 포맷 문자열에 DD를 추가할 수 있습니다.
컴퓨터의 HEADATE에서 시스템 날짜까지의 경과시간을 계산합니다.
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;
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
내부 Oracle 11g
SELECT end_date - start_date AS day_diff FROM tablexxx
suppose the starT_date end_date is define in the tablexxx
select days||' '|| time from (
SELECT to_number( to_char(to_date('1','J') +
(CLOSED_DATE - CREATED_DATE), 'J') - 1) days,
to_char(to_date('00:00:00','HH24:MI:SS') +
(CLOSED_DATE - CREATED_DATE), 'HH24:MI:SS') time
FROM request where REQUEST_ID=158761088 );
좀 더 심플하게 보이려면 지난 1분 동안 발생한 테이블에서 이벤트를 검색하기 위해 다음과 같이 하십시오.
이 엔트리를 사용하면 원하는 minute 값을 얻을 때까지 10진수 값을 조작할 수 있습니다.sysdate 유효 자릿수에 관한 한 값 .0007은 1분입니다.이 값의 배수를 사용하여 원하는 다른 값을 얻을 수 있습니다.
select (sysdate - (sysdate - .0007)) * 1440 from dual;
결과는 1분입니다.
그럼 간단하게 확인할 수 있는 문제네요.
select * from my_table where (sysdate - transdate) < .00071;
'your_table'에서 날짜를 두 개 선택하고 결과를 단일 열 출력으로 보려면 다음과 같이 하십시오(예:'days - hh:mm:ss'는 다음과 같은 것을 사용할 수 있습니다.먼저 이 두 날짜 사이의 간격을 계산하고 그 간격에서 필요한 모든 데이터를 내보낼 수 있습니다.
select extract (day from numtodsinterval (second_date
- add_months (created_date,
floor (months_between (second_date,created_date))),
'day'))
|| ' days - '
|| extract (hour from numtodsinterval (second_date
- add_months (created_date,
floor (months_between (second_date,created_date))),
'day'))
|| ':'
|| extract (minute from numtodsinterval (second_date
- add_months (created_date,
floor (months_between (second_date, created_date))),
'day'))
|| ':'
|| extract (second from numtodsinterval (second_date
- add_months (created_date,
floor (months_between (second_date, created_date))),
'day'))
from your_table
그러면 다음과 같은 결과가 나타납니다. 0일 - 1:14:55
select (floor(((DATE2-DATE1)*24*60*60)/3600)|| ' : ' ||floor((((DATE2-DATE1)*24*60*60) -floor(((DATE2-DATE1)*24*60*60)/3600)*3600)/60)|| ' ' ) as time_difference from TABLE1
(TO_DATE(:P_comapre_date_1, 'dd-mm-yyyy hh24:mi') - TO_DATE(:P_comapre_date_2, 'dd-mm-yyyy hh24:mi'))*60*60*24 sum_seconds,
(TO_DATE(:P_comapre_date_1, 'dd-mm-yyyy hh24:mi') - TO_DATE(:P_comapre_date_2, 'dd-mm-yyyy hh24:mi'))*60*24 sum_minutes,
(TO_DATE(:P_comapre_date_1, 'dd-mm-yyyy hh24:mi') - TO_DATE(:P_comapre_date_2, 'dd-mm-yyyy hh24:mi'))*24 sum_hours,
(TO_DATE(:P_comapre_date_1, 'dd-mm-yyyy hh24:mi') - TO_DATE(:P_comapre_date_2, 'dd-mm-yyyy hh24:mi')) sum_days
select to_char(actual_start_date,'DD-MON-YYYY hh24:mi:ss') start_time,
to_char(actual_completion_date,'DD-MON-YYYY hh24:mi:ss') end_time,
floor((actual_completion_date-actual_start_date)*24*60)||'.'||round(mod((actual_completion_date-actual_start_date)*24*60*60,60)) diff_time
from fnd_concurrent_requests
order by request_id desc;
날짜를 가져오려면 테이블과 열을 사용하는 것을 연기하십시오.
SELECT TO_DATE( TO_CHAR(COLUMN_NAME_1, 'YYYY-MM-DD'), 'YYYY-MM-DD') -
TO_DATE(TO_CHAR(COLUMN_NAME_2, 'YYYY-MM-DD') , 'YYYY-MM-DD') AS DATEDIFF
FROM TABLE_NAME;
여기에는 다음 날짜 사이의 시간이 계산됩니다.
SELECT
(TO_CHAR( TRUNC (ROUND(((sysdate+1) - sysdate)*24,2))*60,'999999')
+
TO_CHAR(((((sysdate+1)-sysdate)*24)- TRUNC(ROUND(((sysdate+1) - sysdate)*24,2)))/100*60 *100, '09'))/60
FROM dual
다른 옵션은 다음과 같습니다.
with tbl_demo AS
(SELECT TO_DATE('11/26/2013 13:18:50', 'MM/DD/YYYY HH24:MI:SS') dt1
, TO_DATE('11/28/2013 21:59:12', 'MM/DD/YYYY HH24:MI:SS') dt2
FROM dual)
SELECT dt1
, dt2
, round(dt2 - dt1,2) diff_days
, round(dt2 - dt1,2)*24 diff_hrs
, numtodsinterval((dt2 - dt1),'day') diff_dd_hh_mm_ss
from tbl_demo;
두 타임스탬프 열의 시간 차이를 반환하는 단일 쿼리:
select INS_TS, MAIL_SENT_TS, extract( hour from (INS_TS - MAIL_SENT_TS) ) timeDiff
from MAIL_NOTIFICATIONS;
round()를 선택합니다.To Date - tbl.from Date) * 24 * 60 * 60 )테이블 tbl 에서
oracle sql의 경우 Ibn은 이를 수행했고 완벽하게 작동합니다.
SELECT trunc(date_col_1) - trunc(date_col_2)
FROM TABLE;
$sql="select bsp_bp,user_name,status,
to_char(ins_date,'dd/mm/yyyy hh12:mi:ss AM'),
to_char(pickup_date,'dd/mm/yyyy hh12:mi:ss AM'),
trunc((pickup_date-ins_date)*24*60*60,2),message,status_message
from valid_bsp_req where id >= '$id'";
언급URL : https://stackoverflow.com/questions/1096853/calculate-difference-between-2-date-times-in-oracle-sql
'programing' 카테고리의 다른 글
RefCursor 반환 유형을 사용하여 Oracle 저장 프로시저를 테스트하는 방법 (0) | 2023.03.17 |
---|---|
배송 방법에 사용자 정의 설명 필드를 추가하는 방법(백엔드) (0) | 2023.03.17 |
워드프레스에서 그라바타 img에 클래스 추가 (0) | 2023.03.17 |
VCRPoxy: 레코드 팬텀Capybara 내의 VCR을 사용한JS ajax 콜 (0) | 2023.03.17 |
Node.js에서 Mongoose로 페이지 번호를 매기는 방법 (0) | 2023.03.17 |