簡體   English   中英

我應該在 OracleDB 中用於查詢的等效函數是什么?

[英]What is the equivalent function I should use for my query in OracleDB?

這是我目前在 Mysql 中使用的 where 子句,我需要用相同的邏輯將其寫入 Oracle。 consprtydate 列是 Timestamp(6) 類型。

WHERE ( ( rs.liferemaining <= 99999 ) 
   OR ( Abs(( Timestampdiff(hour, pk.consprtydate, rs.consprtydate) / 24 )) >= 1 ) )

您的任何天才都可以提供幫助,我們將不勝感激。

根據文檔,函數timestampdiff返回pk.consprtydaters.consprtydate之間的小時數。

小時數除以 24 返回它們之間的數。

那么,你為什么不改用timestampdiff(day, ...)呢?


在 Oracle 中,當您減去兩個DATE數據類型值時,您會得到它們之間的數。 因此,那將是

or abs(pk.consprtydate - rs.consprtydate) >= 1

consprtydate 列是Timestamp(6)類型。

只需添加(或減去)一個INTERVAL文字:

WHERE (
      rs.liferemaining <= 99999
OR    pk.consprtydate <= rs.consprtydate - INTERVAL '1' DAY
OR    pk.consprtydate >= rs.consprtydate + INTERVAL '1' DAY
)

或使用GREATESTLEAST

WHERE (
      rs.liferemaining <= 99999
OR    pk.consprtydate <= rs.consprtydate - INTERVAL '1' DAY
OR    ( GREATEST( pk.consprtydate, rs.consprtydate )
        - LEAST( pk.consprtydate, rs.consprtydate )
        >= INTERVAL '1' DAY )
)

或者,您可以將TIMESTAMP(6)值轉換為DATE ,然后減去,因為默認情況下,這將給出天數(或其分數)的差異:

WHERE (
      rs.liferemaining <= 99999
OR    ABS( CAST( pk.consprtydate AS DATE ) - CAST( rs.consprtydate AS DATE ) ) >= 1
)

(但是,如果您關心小數秒,那么當TIMESTAMP值被截斷為DATE並丟失小數秒時,最后一個選項可能會給出一些無效的響應。)

暫無
暫無

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

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