【问题标题】:Using datediff in sql jdbc query在 sql jdbc 查询中使用 datediff
【发布时间】:2012-12-24 09:21:17
【问题描述】:

我正在尝试使用以下语句创建 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)}

但它也失败了我后来发现这只是用于德比数据库的

有人可以帮助我使用正确的 sql 函数来使用 JDBC 将日期与当前日期进行比较

【问题讨论】:

  • 了解您的数据库类型和版本会有所帮助:)
  • FWIW,您发布的查询在 sql server 中运行良好(正确关闭引号后)。这表明问题出在我们看不到的查询的其他部分。或者您使用的是不同的数据库类型;-)

标签: java sql jdbc datediff


【解决方案1】:
String query = "SELECT COLUMN1,DATECOLUMN2 FROM tableName "+
               "where datediff(day,DATECOLUMN2,getdate()) <= 1";

【讨论】:

  • 感谢您的回复。我试过了,所有大写的 'dd' 也没有用
  • @MarquisBlount:您是否只是尝试将d 替换为ddday?我想真正的问题是tablename 之后双引号的实际位置。我怀疑您没有在字符串末尾留下空格,因此表名与where 合并。详情请看我的回答。
【解决方案2】:

from 前面有一个逗号。根据您对 SQL 服务器运行此错误消息。

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

【讨论】:

  • 抱歉,我编辑了查询并删除了一些无关紧要的附加字段
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    发布的 sn-p 在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,因为这确实是一个不正确的表提示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多