[英]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.consprtydate
和rs.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
)
或使用GREATEST
和LEAST
:
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.