【问题标题】:Spring JDBC Template SQL-Query filtered by dateSpring JDBC Template SQL-Query 按日期过滤
【发布时间】: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 中一样工作。

标签: java spring oracle jdbc


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    相关资源
    最近更新 更多