0

次のステートメントを使用して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

4 に答える 4

3
String query = "SELECT COLUMN1,DATECOLUMN2 FROM tableName "+
               "where datediff(day,DATECOLUMN2,getdate()) <= 1";
于 2013-01-10T03:17:25.487 に答える
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 Serverdは、実際には正しくないテーブルヒントであるため、つまずきます。

于 2013-01-10T09:29:54.963 に答える
0

fromの前にコンマがあります。SQLサーバーに対してこれを実行しているエラーメッセージに基づいています。

String query = "SELECT COLUMN1,DATECOLUMN2 FROM tableName " 
              +" where datediff(d,DATECOLUMN2,getdate()) <= 1";
于 2013-01-10T03:32:21.773 に答える
0

「d」の後のコンマはドットである必要があります。

where datediff(d.DATECOLUMN2,getdate())
--------------- ^ dot here
于 2013-01-10T03:54:43.380 に答える