Spring JDBC Template SQL-Query 按日期过滤

Posted

技术标签:

【中文标题】Spring JDBC Template SQL-Query 按日期过滤【英文标题】:Spring JDBC Template SQL-Query filtered by date 【发布时间】:2015-08-06 10:07:04 【问题描述】:

我需要按两个日期过滤我的查询。当我使用 Oracle SQL Developer 或直接从 Eclipse 查询它时,这是有效的:

select * from TABLE where rechnungs_eingang >= '06.08.2012' AND rechnungs_eingang <= '06.08.2015')

但如果我尝试通过我用 Spring 4 实现的 web 服务获取数据,我会得到这个异常:

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

这里发生了什么以及为什么发生?

【问题讨论】:

那个 SELECT 语句是你在 sql developer 中实际使用的那个吗?由于没有使用日期格式,我看不出它会如何工作。 rechnungs_eingang 是 DATE 列吗? 是的 - rechnungs_eingang 是一个日期列。它就像在 SQL Developer 中一样工作。 【参考方案1】:

如果您在查询中传入字符串值,则需要使用to_date 函数并提供date format mask。像这样:to_date('06.08.2012', 'DD.MM.YYYY')

您在 SQLDeveloper 中没有提供日期格式的情况下使用此功能的原因可能是您的语言环境中使用的默认格式是 'DD.MM.YYYY' 并且隐式 VARCHAR->DATE 转换发生正确。

【讨论】:

以上是关于Spring JDBC Template SQL-Query 按日期过滤的主要内容,如果未能解决你的问题,请参考以下文章

Spring的JDBC Template

Spring之JDBC Template

Spring框架JDBC Template使用教程

spring系统学习--4 Spring:JDBC Template

Spring JDBC Template -实验介绍

spring+jdbc+template+transaction实现