【问题标题】:SQL Error: ORA-01861: literal does not match format stringSQL 错误:ORA-01861:文字与格式字符串不匹配
【发布时间】:2016-04-02 19:15:47
【问题描述】:

当我尝试运行此语句时,我在 Oracle 中不断收到此错误。我不确定格式错误来自哪里。也许有新鲜眼睛的人可以帮助我解决这个问题。

INSERT INTO Faculty
(FacNo, FacFirstName, FacLastName, FacCity, FacState,
 FacDept, FacRank, FacSalary, FacSupervisor, FacHireDate, FacZipCode)
 VALUES ('543-21-0987','VICTORIA','EMMANUEL','BOTHELL','WA','MS','PROF',120000.0,'','2001-04-15','98011-2242');

这是我不断收到的错误消息:

从第 1 行开始的错误命令 - 错误报告 - SQL 错误:ORA-01861:文字与格式字符串不匹配 01861. 00000 - “文字与格式字符串不匹配” *原因:输入中的文字必须与输入中的文字长度相同 格式字符串(前导空格除外)。如果 “FX”修饰符已打开,文字必须完全匹配, 没有额外的空格。 *操作:更正格式字符串以匹配文字。

这是我试图将这些数据插入到表中的规格:

FACNO CHAR(11 字节)
FACFIRSTNAME VARCHAR2(30 字节)
FACLASTNAME VARCHAR2(30 字节)
FACCITY VARCHAR2(30 字节)
FACSTATE CHAR(2 字节)
FACZIPCODE CHAR(10 字节)
FACRANK CHAR(4 字节)
约会日期
传真号码(10,2)
FACSUPERVISOR CHAR(11 字节)
FACDEPT CHAR(6 字节)

【问题讨论】:

标签: sql string oracle


【解决方案1】:

很可能,您的NLS_DATE_FORMAT,文字的默认日期格式与您的字符串不匹配。永远不要假设日期以一种或另一种方式格式化。使用TO_DATE函数指定格式,所以转换为:

Insert (... to_date('2001-04-15','YYYY-MM-DD')...

【讨论】:

    【解决方案2】:

    OldProgrammers 的答案是正确的答案。将字符串显式转换为日期是最安全的。 MS-SQL 通常会自动转换任何可识别为日期的内容,如果您的格式与系统的默认格式匹配,Oracle 会执行此操作。我使用过的所有 Oracle 系统都使用“DD/MON/YY”或两位数的日期、三个字母的月份缩写和两位数的年份作为默认值,并且会自动转换。这不是正确的做法,但每个人有时都喜欢偷懒。

    【讨论】:

      【解决方案3】:
      ORA-01861: literal does not match format string
      

      这是因为您尝试输入带有格式字符串的文字,但格式字符串的长度与文字的长度不同。

      您可以通过执行以下更改来解决此问题。

      TO_DATE('2001-04-15','YYYY-MM-DD')
      

      作为一般规则,如果您使用 TO_DATE 函数,则 TO_TIMESTAMP 函数、TO_CHAR 函数和类似函数,请确保 您提供的文字与您提供的格式字符串匹配 指定

      【讨论】:

        猜你喜欢
        • 2014-04-27
        • 1970-01-01
        • 2015-02-13
        • 2017-08-24
        • 2015-01-11
        • 2010-11-26
        • 2012-10-09
        相关资源
        最近更新 更多