我需要按两个日期过滤我的查询。当我使用Oracle SQL Developer或Eclipse进行查询时,这是有效的:
select * from TABLE where rechnungs_eingang >= '06.08.2012' AND rechnungs_eingang <= '06.08.2015')
但是,如果我尝试通过我的网络服务获取数据,我已经使用Spring 4实现了这个例外:
Caused by: org.springframework.dao.DataIntegrityViolationException: StatementCallback; SQL [select * from TABLE where rechnungs_eingang >= '06.08.2012' AND rechnungs_eingang <= '05.05.2014')]; ORA-01843: not a valid month
; nested exception is java.sql.SQLException: ORA-01843: not a valid month
这里发生了什么和为什么?
答案 0 :(得分:4)
如果在查询中传入字符串值,则需要使用to_date
函数并提供date format mask。像这样:to_date('06.08.2012', 'DD.MM.YYYY')
。
您在SQLDeveloper中使用它而不提供日期格式的原因很可能是您的语言环境中使用的默认格式为'DD.MM.YYYY'
以及隐式VARCHAR
- &gt; DATE
转换发生得正确。