JDBC 模板中的 DATEADD
Posted
技术标签:
【中文标题】JDBC 模板中的 DATEADD【英文标题】:DATEADD in JDBC template 【发布时间】:2021-05-06 13:44:58 【问题描述】:我正在尝试使用 jdbc 和 spring boot 进行查询选择,
我想要选择我的创建日期值小于现在减去 30 的信息。
我试过这样:
SELECT *
FROM informations
WHERE lastTreatment < DATEADD(MINUTE, -30, GETDATE())
我有这样的错误:
原因:org.springframework.jdbc.BadSqlGrammarException: StatementCallback;糟糕的 SQL 语法
有人知道吗?谢谢
【问题讨论】:
标记你的 dbms ,你的查询看起来没问题, 它是 oracle JDBC 这对Oracle来说是无效的。试试lasttreatment < current_timestamp - interval '30' minute
【参考方案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
这件事让我想知道它是否是别的东西。以上是关于JDBC 模板中的 DATEADD的主要内容,如果未能解决你的问题,请参考以下文章