我正在尝试使用以下语句创建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
将日期与当前日期进行比较答案 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
,因为这确实是一个不正确的表提示。