有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    “d”后面的逗号应该是点:

    where datediff(d.DATECOLUMN2,getdate())
    --------------- ^ dot here
    
  2. # 2 楼答案

    在from前面有一个逗号。根据针对SQL server运行的错误消息

    String query = "SELECT COLUMN1,DATECOLUMN2 FROM tableName " 
                  +" where datediff(d,DATECOLUMN2,getdate()) <= 1";
    
  3. # 3 楼答案

    发布的代码片段在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/旧版本的兼容级别中不使用指定表提示。)因此,SQL Server在d上遇到了问题,因为这确实是一个不正确的表提示

  4. # 4 楼答案

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