Oracle
在 Oracle 中使用 ISO8601 日期
我對其他 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;
但是,通常不贊成依賴隱式轉換,因為其他人可能會連接到您的數據庫並為其會話指定不同的設置,然後您會收到錯誤或不正確的轉換。您通常希望更喜歡從一種數據類型到另一種數據類型的顯式轉換。