我对其他 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 日期文字
如果您想依赖字符串到日期和日期到字符串的隐式数据类型转换,这由会话的
nls_date_format
如果你这样做,你的字符串将被隐式转换为
date
并且您运行的任何查询都将隐式转换
date
为 ISO 格式的字符串。但是,通常不赞成依赖隐式转换,因为其他人可能会连接到您的数据库并为其会话指定不同的设置,然后您会收到错误或不正确的转换。您通常希望更喜欢从一种数据类型到另一种数据类型的显式转换。