[英]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
您會看到與表名合並的where
, datediff
成為別名。 以下內容被解釋為表提示。 (您可以在舊版本的SQL Server /舊版本的兼容級別中指定不帶WITH的表提示。)因此,SQL Server偶然發現了d
,因為這確實是不正確的表提示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.