Sql ORA-01861文字与SELECT语句上的格式字符串不匹配

Sql ORA-01861文字与SELECT语句上的格式字符串不匹配,sql,oracle,sqlexception,Sql,Oracle,Sqlexception,你好 我正在执行一个查询并遇到: ORA-01861 literal does not match format string error. 我执行了这个查询,它成功了 SELECT * FROM GCACC_OPERATION_DETAIL WHERE id_notice in (75078741) AND id_analytical_center in (100000002) AND interface_date = '2013-06-30' AND generic_client =

你好

我正在执行一个查询并遇到:

ORA-01861 literal does not match format string error.
我执行了这个查询,它成功了

SELECT * FROM GCACC_OPERATION_DETAIL WHERE id_notice in (75078741) 
AND id_analytical_center in (100000002) 
AND interface_date = '2013-06-30' 
AND generic_client = 'someGenClient' 
AND document_class = 'DOCCLA0001' 
AND accounting_tag_identifier = 1 
AND generated_actual_acc_doc 
IN (select id_accounting_document 
from gcacc_accounting_document 
where document_status = 'DOCSTA0001');
我的另一个查询写在下面,但不起作用

SELECT * FROM GCACC_OPERATION_DETAIL WHERE id_notice IN (75078741) 
AND id_analytical_center in (100000002) 
AND generic_client = 'someGenClient' 
AND document_class = 'DOCCLA0001' 
AND accounting_tag_identifier = 1 
AND interface_date = '2013-06-30' 
AND ind_pending_process = 1 
AND operation_type 
IN (select cod_develop from gcacc_operation_type where ind_operation = 'B');

这真的很奇怪,因为错误发生在日期部分,但我正在为日期部分编写相同的语法。我可能错过了一些愚蠢的事情,需要更新鲜的眼睛。提前谢谢

我不知道具体的问题是什么,但假设“interface_date”是一种日期类型,在查询日期时使用文本是一种不好的做法。这就假设默认的NLS_DATE_格式与日期文字一致。它会回来咬你的。要确保日期约束可移植,请更改为:

AND interface_date = to_date('2013-06-30','YYYY-MM-DD')

我不知道具体的问题是什么,但假设“interface_date”是一种日期类型,在查询日期时使用文本是一种不好的做法。这就假设默认的NLS_DATE_格式与日期文字一致。它会回来咬你的。要确保日期约束可移植,请更改为:

AND interface_date = to_date('2013-06-30','YYYY-MM-DD')

嗨,谢谢你的回答。我进一步调查,得到了发生这种情况的原因。第一个查询没有结果集,而第二个查询有结果集,这就是第一个查询没有抛出错误的原因。感谢您对sql日期的良好实践,我将实现它!:)您好,您有我可以为to_date()的第二个参数提供的日期格式列表吗?谢谢。:)以下是所有oracle格式选项—在日期中使用字符串文字是不好的,尤其是在隐式转换中。但是使用ANSI日期文字是个好主意。将其更改为日期“2013-06-30”,无论NLS_date_格式如何,它都会工作,并且也会在编译时而不是运行时进行检查。您好,谢谢您的回答。我进一步调查,得到了发生这种情况的原因。第一个查询没有结果集,而第二个查询有结果集,这就是第一个查询没有抛出错误的原因。感谢您对sql日期的良好实践,我将实现它!:)您好,您有我可以为to_date()的第二个参数提供的日期格式列表吗?谢谢。:)以下是所有oracle格式选项—在日期中使用字符串文字是不好的,尤其是在隐式转换中。但是使用ANSI日期文字是个好主意。将其更改为日期“2013-06-30”,无论NLS_date_格式如何,它都将工作,并且它也将在编译时而不是运行时进行检查。