繁体   English   中英

Oracle SQL Developer 中的 DATE 格式

[英]DATE format in Oracle SQL Developer

只是 Oracle SQL Developer 中某些编码的一个小问题。 这是我第一次离开 SQL Server,我已经对我做错了什么感到困惑。

我只是想在表中插入一些数据,但我遇到了一个错误;
Error report - ORA-01861: literal does not match format string

我将表中的日期字段设置为数据类型 DATE。 我想插入的只是一些基本信息;
INSERT INTO BasicUsers VALUES(2125, 'Dave', 'Forest', 'John', '1998-10-25', 30.54);

我在互联网上做了一些研究,没有什么可以让我理解的。 我尝试将日期格式更改为 YYYY-MON-DD 所以 1998-Oct-25 但这也不起作用。

谁能解释我在这里做错了什么以及我如何纠正这个问题。
谢谢你。

'1998-10-25'不是DATE数据类型; 它是一个字符串文字。

相反,使用DATE文字:

INSERT INTO BasicUsers  VALUES(2125, 'Dave', 'Forest', 'John', DATE '1998-10-25', 30.54);

或者使用带有格式模型的TO_DATE函数将字符串显式转换为DATE

INSERT INTO BasicUsers
  VALUES(2125, 'Dave', 'Forest', 'John', TO_DATE( '1998-10-25', 'YYYY-MM-DD' ), 30.54);

不要依赖从字符串到DATE隐式转换,因为 Oracle 将尝试使用NLS_DATE_FORMAT会话参数隐式地将日期转换为字符串。 您的查询有效:

INSERT INTO BasicUsers
  VALUES(2125, 'Dave', 'Forest', 'John',
  TO_DATE(
    '1998-10-25',
    ( SELECT value FROM NLS_SESSION_PARAMETERS WHERE parameter = 'NLS_DATE_FORMAT' )
  ),
  30.54);

如果会话参数不匹配,那么您的查询将引发异常。 由于用户可以随时更改自己的会话参数,那么你就可以永远依靠这种格式是用户甚至用户的会话之间是一致的,所以你应该始终明确的转换,你的执行情况。

使用DATE前缀:

INSERT INTO BasicUsers 
    VALUES (2125, 'Dave', 'Forest', 'John', DATE '1998-10-25', 30.54)

我还建议您为插入包含明确的列名。 例如,值的定义顺序可能与您提供值的顺序不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM