Oracle

在 Oracle 中使用 ISO8601 日期

  • October 5, 2021

我對其他 SQL(PostgreSQL、Microsoft Server、MySQL、SQLite)非常有經驗,但在 Oracle 中則不然。

有什麼方法可以讓 Oracle 接受 ISO8601 格式的日期文字。例如:

CREATE TABLE data (
   id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
   name VARCHAR(255),
   when DATE
);
INSERT INTO data(name,when) VALUES ('Fred','2021-10-05');
--  ORA-01861: literal does not match format string

請參閱此DBFiddle

當然必須有開關。

這同樣適用於輸出日期:有沒有辦法確保 ISO8601 格式的日期?

Oracle 支持 ANSI 日期文字

INSERT INTO data(name,when) VALUES ('Fred',date '2021-10-05');

如果您想依賴字元串到日期和日期到字元串的隱式數據類型轉換,這由會話的nls_date_format

alter session set nls_date_format = 'yyyy-mm-dd';

如果你這樣做,你的字元串將被隱式轉換為date

INSERT INTO data(name,when) VALUES ('Fred','2021-10-05');

並且您執行的任何查詢都將隱式轉換date為 ISO 格式的字元串。

select * from data;

但是,通常不贊成依賴隱式轉換,因為其他人可能會連接到您的數據庫並為其會話指定不同的設置,然後您會收到錯誤或不正確的轉換。您通常希望更喜歡從一種數據類型到另一種數據類型的顯式轉換。

引用自:https://dba.stackexchange.com/questions/300644