簡體   English   中英

在SQL JDBC查詢中使用Datediff

[英]Using datediff in sql jdbc query

我正在嘗試使用以下語句創建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 Database的

有人可以協助我使用適當的sql函數使用JDBC將日期與當前日期進行比較

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

之前您有一個逗號。 根據錯誤消息,您正在針對SQL Server運行此消息。

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

“ d”后的逗號應為點號:

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

發布的代碼段在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

您會看到與表名合並的wheredatediff成為別名。 以下內容被解釋為表提示。 (您可以在舊版本的SQL Server /舊版本的兼容級別中指定不帶WITH的表提示。)因此,SQL Server偶然發現了d ,因為這確實是不正確的表提示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM