在sql jdbc查询中使用datediff

时间:2013-01-10 03:15:30

标签: java sql jdbc datediff

我正在尝试使用以下语句创建JDBC查询

String query = "SELECT COLUMN1,DATECOLUMN2 FROM tableName +
            "where datediff(d,DATECOLUMN2,getdate()) <= 1";
st = conn1.createStatement();
rs = st.executeQuery(query);  //receiving error here

我收到以下错误消息

java.sql.SQLException: "d" is not a recognized table hints option. If it is intended as a parameter to a table-valued function or to the CHANGETABLE function, ensure that your database compatibility mode is set to 90.

我确定查询由于某种原因没有识别datediff函数我不知道为什么因为我以前在同一个应用程序中使用HQL并检索值。

试图使用我使用的替代功能

{fn TIMESTAMPADD( SQL_TSI_DAY, 1, CURRENT_TIMESTAMP)}

但它也失败我后来发现这只用于Derby数据库的

有人可以帮我使用正确的sql函数,使用JDBC

将日期与当前日期进行比较

4 个答案:

答案 0 :(得分:3)

String query = "SELECT COLUMN1,DATECOLUMN2 FROM tableName "+
               "where datediff(day,DATECOLUMN2,getdate()) <= 1";

答案 1 :(得分:0)

你之前有一个逗号。基于您针对SQL Server运行此错误消息。

String query = "SELECT COLUMN1,DATECOLUMN2 FROM tableName " 
              +" where datediff(d,DATECOLUMN2,getdate()) <= 1";

答案 2 :(得分:0)

“d”后面的逗号应为点:

where datediff(d.DATECOLUMN2,getdate())
--------------- ^ dot here

答案 3 :(得分:0)

已发布的代码段在tableName+之间没有结束双引号,但我认为这只是一个错字。但是,在您的真实代码中,精确是双引号?它是直接在tablename之后,像这样

String query = "SELECT COLUMN1,DATECOLUMN2 FROM tableName" +

或在tablename之后的空格之后,像这样

String query = "SELECT COLUMN1,DATECOLUMN2 FROM tableName "+

很可能是前者,因为在这种情况下,生成的查询看起来就像导致你得到的错误一样。看看这个:

SELECT COLUMN1,DATECOLUMN2 FROM tableNamewhere datediff(d,DATECOLUMN2,getdate()) <= 1

您可以看到where与表名合并,datediff成为别名。以下内容被解释为表提示。 (您可以在旧版本的SQL Server /旧兼容级别中指定不带WITH的表提示。)因此,SQL Server偶然发现d,因为这确实是一个不正确的表提示。