【问题标题】:DATEADD in JDBC templateJDBC 模板中的 DATEADD
【发布时间】:2021-05-06 13:44:58
【问题描述】:

我正在尝试使用 jdbcspring boot 进行查询选择,

我想要选择我的创建日期值小于现在减去 30 的信息。

我试过这样:

SELECT *  
FROM informations 
WHERE lastTreatment < DATEADD(MINUTE, -30, GETDATE())

我有这样的错误:

原因:org.springframework.jdbc.BadSqlGrammarException: StatementCallback;糟糕的 SQL 语法

有人知道吗?谢谢

【问题讨论】:

  • 标记你的 dbms ,你的查询看起来没问题,
  • 它是 oracle JDBC
  • 这对Oracle来说是无效的。试试lasttreatment &lt; current_timestamp - interval '30' minute

标签: sql oracle spring-boot jdbc


【解决方案1】:

您声称是 Oracle,但看起来您编写的是 MS SQL Server 或 MySQL。 Oracle 中没有 DATEADD 这样的函数,也没有 GETDATE 函数。要在日期中添加 x 天,只需执行 date+x。在这种情况下,您只需要一天的一小部分,因此只需添加一个 x 即可产生需要的部分。对于 30 分钟,这将是 30/(60*24) 或 (30 分钟/(每小时 60 分钟 * 每天 24 小时)。对于 GETDATE,只需使用 SYSDATE。 所以你的查询变成了:

SELECT *  
FROM informations 
WHERE lastTreatment < sysdate-(30/(60*24));

【讨论】:

  • 我已经尝试过 sysdate 但它是一样的东西,似乎 SYSDATE 无法被 JDC 查询和 spring boot 识别
  • 那么问题出在 JDBC 和/或 Spring 引导上。自 1997 年 6 月发布的第 8 版以来,Sysdate 一直是 Oracle 中的基本版本(我怀疑要旧得多,但快速的 Internet 搜索找不到更早的参考。)
【解决方案2】:

也许不见了;最后?

SELECT *  
FROM informations 
WHERE lastTreatment < DATEADD(MINUTE, -30, GETDATE());

【讨论】:

  • 不使用 Java 我们不放这个“;” , 是 JDBC 模板,问题出在日期,但我不知道具体是什么
  • 不是java语法,是sql语法,应该是你的查询字符串的一部分。
  • 如果标记为 Oracle SQL,则没有任何 ; 字符。 dateadd 这件事让我想知道它是否是别的东西。
猜你喜欢
  • 2019-01-25
  • 2012-12-15
  • 2018-06-25
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多