SQL错误:ORA-01861:文字与格式字符串不匹配

时间:2015-12-28 22:56:05

标签: sql string oracle

当我尝试运行此语句时,我在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 BYTE)
  FACFIRSTNAME VARCHAR2(30 BYTE)
  FACLASTNAME VARCHAR2(30 BYTE)
  FACCITY VARCHAR2(30 BYTE)
  FACSTATE CHAR(2 BYTE)
  FACZIPCODE CHAR(10 BYTE)
  FACRANK CHAR(4 BYTE)
  FACHIREDATE DATE
  FACSALARY NUMBER(10,2)
  FACSUPERVISOR CHAR(11 BYTE)
  FACDEPT CHAR(6 BYTE)

3 个答案:

答案 0 :(得分:2)

最有可能的是,NLS_DATE_FORMAT,文字的默认日期格式与您的字符串不匹配。永远不要假设日期的格式是这样或那样的。使用TO_DATE函数指定格式,因此请转换为:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

ORA-01861: literal does not match format string

之所以会发生这种情况,是因为您试图输入带有格式字符串的文字,但是格式字符串的长度与文字的长度不同。

您可以通过执行以下更改来克服此问题。

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

通常,如果您使用的是TO_DATE函数,则TO_TIMESTAMP   函数,TO_CHAR函数和类似函数,请确保   您提供的文字与您所拥有的格式字符串匹配   指定