[英]Comparing date type column with a timestamp column
我有一張桌子,說三列的演示
create table demo(demo_id number,
created_date date,
mod_date systimestamp(6)
);
我的要求是返回一個包含兩列的 refcursor
1. Demo_id
2. Status column
這將導出如下:
if created_date = mod_date then "New" else "Updated" .
所以我把我的代碼寫成:
select demo_id ,case when created_date=mod_date then "New" else "update" end from demo;
但不知何故,即使日期相同,包括時間組件我的狀態值總是顯示更新。 我正在使用 SQL 開發人員運行我的查詢,並將 nls_date_format 修改為 DD/mm/yyyy hh24:mi:SS。 mod_date 也將存儲 systimestamp。
您正在將具有秒精度的日期與具有小數秒精度的時間戳進行比較。
如果created_date
取自 sysdate 而mod_date
取自 systimestamp ,那么您可以將2022-08-06 23:36:58
與2022-08-06 23:36:58.373657
進行比較。 那些不一樣。
數據類型比較和優先級規則意味着日期值被隱式轉換為時間戳,但這僅意味着它現在將2022-08-06 23:36:58.000000
與2022-08-06 23:36:58.373657
進行比較。 那些仍然不一樣。
由於您無法為日期添加精度,因此您必須從時間戳中刪除精度,您可以通過將其轉換為該數據類型來做到這一點:
case when created_date = cast(mod_date as date) then 'New' else 'Updated' end as status
但是,如果該行在創建的同一秒內被修改 - 例如,從之前使用的示例中,如果mod_date
設置為2022-08-06 23:36:58.999999
- 那么這不會被視為更新,因為一旦精度降低,原始和更新的mod_date
是相同的,並且都與created_date
相同。
這對您來說可能不是問題,但如果您也將created_date
設置為時間戳,並使用systimestamp
進行設置,它仍然會更簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.