Oracle
如何使用 Oracle 從“日期”類型的列創建 UTC 索引?
我有一個帶有“日期”類型列的 Oracle 數據庫,它在本地時區儲存時間戳。我需要使用 UTC 時區的時間戳查詢此列。
如何在使用 UTC 時間戳查詢時可以使用的列上創建索引以及如何格式化查詢?
準確地說,該類型儲存沒有任何時區資訊
date
的時間戳,而不是“在本地時區”。如何在使用 UTC 時間戳查詢時可以使用的列上創建索引以及如何格式化查詢?
你有三個選擇:
- 查詢時索引
date
並轉換timestamp
為date
,例如:select * from foo where foo_date=cast(systimestamp as date) from dual;
date
在轉換為 a時創建一個功能索引timestamp with local time zone
,例如:create unique index i_foo on foo(cast(ts as timestamp with local time zone)); select * from foo where cast(ts as timestamp with local time zone)= cast(X as timestamp with local time zone);
- 將類型列的類型更改
date
為timestamp with time zone
或timestamp with local time zone
其中,最後一個選項很可能是最好的選項——
timestamp with local time zone
對於大多數指代固定時間點的數據來說,它是“正確”類型。(與“中午”相反,無論您在哪個時區,它始終是 12:00。)