簡體   English   中英

如何為 datediff 合並兩列日期 + 時間 - Oracle sql

[英]How to unite two columns of date + time for datediff - Oracle sql

我有兩個int列: thedate - 例如 20210512 thetime - 例如 142342

所以,我需要將它們合並到一列以檢查時差是否低於 5。

我試過這個:

TO_DATE(sysdate) - TO_DATE(thedate, 'YYYY-MM-DD') < 5

但它只適用於日期而不是時間,所以我很高興知道如何將兩個 int 列 + 合並並將其轉換為日期類型以獲得時差。

您想轉換為時間戳,而不是日期。 所以:

select to_timestamp(cast(20210512 * 1000000 + 142342 as varchar2(255)), 'YYYYMMDDHH24MISS')
from dual;

是一個 db<>fiddle 表明這是有效的。

或者在where子句中:

to_timestamp(cast(thedate * 1000000 + thetime as varchar2(255)), 'YYYYMMDDHH24MISS') > sysdate - interval '5' day

(或者你所說的“5”)。

注意:您可能希望將計算列添加到具有完整時間戳的表中:

alter table t add column timestamp generated always as
    ( to_timestamp(cast(thedate * 10000 + thetime as varchar2(255)), 'YYYYMMDDHH24MISS') );

您可以使用:

SELECT *
FROM   table_name
WHERE  TO_DATE( thedate * 1000000 + thetime, 'YYYYMMDDHH24MISS' ) > SYSDATE - 5; 

其中,對於樣本數據:

CREATE TABLE table_name ( thedate INT, thetime INT );
INSERT INTO TABLE_NAME ( thedate, thetime ) VALUES (
  TO_NUMBER( TO_CHAR( SYSDATE, 'YYYYMMDD' ) ),
  TO_NUMBER( TO_CHAR( SYSDATE, 'HH24MISS' ) )
);
INSERT INTO TABLE_NAME ( thedate, thetime ) VALUES (
  TO_NUMBER( TO_CHAR( SYSDATE - INTERVAL '4 23' DAY TO HOUR, 'YYYYMMDD' ) ),
  TO_NUMBER( TO_CHAR( SYSDATE - INTERVAL '4 23' DAY TO HOUR, 'HH24MISS' ) )
);
INSERT INTO TABLE_NAME ( thedate, thetime ) VALUES (
  TO_NUMBER( TO_CHAR( SYSDATE - INTERVAL '5 1' DAY TO HOUR, 'YYYYMMDD' ) ),
  TO_NUMBER( TO_CHAR( SYSDATE - INTERVAL '5 1' DAY TO HOUR, 'HH24MISS' ) )
);

輸出:

日期 時間
20210512 131832
20210507 141832

或者,如果您想在thedatethetime列上使用索引(上面的查詢不會在thedatethetime列上使用索引,但需要基於函數的索引)然后:

SELECT *
FROM   table_name
WHERE  thedate > TO_NUMBER( TO_CHAR( SYSDATE - 5, 'YYYYMMDD' ) )
OR     (   thedate = TO_NUMBER( TO_CHAR( SYSDATE - 5, 'YYYYMMDD' ) )
       AND thetime >= TO_NUMBER( TO_CHAR( SYSDATE - 5, 'HH24MISS' ) )
       )

但是,更好的解決方案是為您的數據使用適當的數據類型; 在這種情況下,您應該將日期值存儲在DATE數據類型(在 Oracle 中,包含年秒組件)中,而不是作為日期和時間的兩個INT值。

db<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM