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

Posted

技术标签:

【中文标题】SQL 错误:ORA-01861:文字与格式字符串 01861 不匹配【英文标题】:SQL Error: ORA-01861: literal does not match format string 01861 【发布时间】:2014-04-27 21:11:46 【问题描述】:

我正在尝试将数据插入现有表并不断收到错误。

INSERT INTO Patient  
(
  PatientNo,
  PatientFirstName,
  PatientLastName,
  PatientStreetAddress,
  PatientTown,
  PatientCounty,
  PatientPostcode,
  DOB,
  Gender,
  PatientHomeTelephoneNumber,
  PatientMobileTelephoneNumber
)
VALUES 
(
  121, 
  'Miles', 
  'Malone', 
  '64 Zoo Lane', 
  'Clapham', 
  'United Kingdom',
  'SW4 9LP',
  '1989-12-09',
  'M',
  02086950291,
  07498635200
);

错误:

Error starting at line : 1 in command -
INSERT INTO Patient (PatientNo,PatientFirstName,PatientLastName,PatientStreetAddress,PatientTown,PatientCounty,PatientPostcode,DOB,Gender,PatientHomeTelephoneNumber,PatientMobileTelephoneNumber)
VALUES (121, 'Miles', 'Malone', '64 Zoo Lane', 'Clapham', 'United Kingdom','SW4 9LP','1989-12-09','M',02086950291,07498635200)
Error report -
SQL Error: ORA-01861: literal does not match format string
01861. 00000 -  "literal does not match format string"
*Cause:    Literals in the input must be the same length as literals in
           the format string (with the exception of leading whitespace).  If the
           "FX" modifier has been toggled on, the literal must match exactly,
           with no extra whitespace.
*Action:   Correct the format string to match the literal.

只是不知道为什么这种情况一直发生,我目前正在学习 SQL,任何帮助将不胜感激!

【问题讨论】:

我们可以看看你的表结构吗?我怀疑是VARCHAR2 或其他电话号码,而您将它们插入为NUMBER @MikeBurton CREATE TABLE Patient ( PatientNo CHAR(5) NOT NULL PRIMARY KEY, InvoiceNo CHAR(5) NOT NULL, PatientFirstName VARCHAR2(20) NOT NULL, PatientLastName VARCHAR2(20) NOT NULL, PatientStreetAddress VARCHAR2 (40) 非空,PatientTown VARCHAR2(20),PatientCounty VARCHAR2(20),PatientPostcode VARCHAR2(8) 非空,出生日期非空,性别 CHAR(1) 约束 pat_g_nn 非空,PatientHomeTelephoneNumber VARCHAR2(11) 约束 pat_phtn_nn); 我敢打赌这是DOB 专栏。如果是这种情况,请尝试使用TO_DATE 函数正确解析日期字符串'1989-12-09' PatientHomeTelephoneNumber 是 varchar2,您将其插入为 NUMBER,它应该被 '' 包围,我在您的 create 语句中看不到 PatientMobileTelephoneNumber 【参考方案1】:

您用于日期的格式与 Oracle 的默认日期格式不匹配。

Oracle 数据库的默认安装将默认日期格式设置为dd-MMM-yyyy

要么使用函数TO_DATE(dateStr, formatStr),要么直接使用dd-MMM-yyyy日期格式模型。

【讨论】:

【参考方案2】:
ORA-01861: literal does not match format string

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

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

TO_DATE('1989-12-09','YYYY-MM-DD')

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

【讨论】:

【参考方案3】:

尝试像这样保存日期 yyyy-mm-dd hh:mm:ss.ms 例如: 1992-07-01 00:00:00.0 对我有用

【讨论】:

【参考方案4】:

您还可以更改会话的日期格式。这很有用,例如,在 to_date() 函数不可用的 Perl DBI 中:

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD'

您也可以永久设置默认的 nls_date_format:

ALTER SYSTEM SET NLS_DATE_FORMAT='YYYY-MM-DD'

在 Perl DBI 中,您可以使用 do() 方法运行这些命令:

$db->do("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD');

http://www.dba-oracle.com/t_dbi_interface1.htm https://community.oracle.com/thread/682596?start=15&tstart=0

【讨论】:

【参考方案5】:

如果您提供了正确的日期格式,它应该可以工作,如果您在插入值中提供了正确的日期格式,请重新检查一次

【讨论】:

【参考方案6】:

试试 dd-mon-yyyy 的格式,例如 02-08-2016 的格式应该是 '08-feb-2016'。

【讨论】:

【参考方案7】:

尝试将日期'1989-12-09' 的字符串文字替换为TO_DATE('1989-12-09','YYYY-MM-DD')

【讨论】:

或者由于它的格式正确,您可以使用日期文字作为date '1989-12-09',而不是使用to_date() 谢谢各位,还有一个问题,如果你要抽时间的话。约会时间,如果它的格式为'17:43:09',你是否需要在时间前面加上一些东西?? @alexpoole 有一段时间也是这样吗?? Oracle 中没有时间数据类型,它仍然是date,我认为您还需要包括它的日期部分。 @LizzyPooh - 您可以将约会日期/时间存储为DATE,使用to_date('2014-03-21 09:15:00', 'YYYY-MM-DD HH24:MI:SS')timestamp '2014-03-21 09:15:00.0' - read more 填充它。

以上是关于SQL 错误:ORA-01861:文字与格式字符串 01861 不匹配的主要内容,如果未能解决你的问题,请参考以下文章

Oracle sql 错误 : ORA-01861: 文字与格式字符串不匹配和日期与字符串互转问题解决

java sql SQLException ORA-01861 文字和格式字符串不匹配

java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配

java.sql.SQLException: ORA-01861: 文字与格式字符串不匹配

查询 SQL语句的时候 出现oracle ora 01861 文字与字符串格式不匹配 百思不得其解!

Oracle ORA-01861: 文字与格式字符串不匹配