2

Oracle と SQL Server の両方をサポートする必要があります。get_current_date両方の DB で名前が付けられたかなり同一のプロシージャがあります。今、私はクエリを持っています:

SELECT col1, col2 FROM table WHERE colDate < get_current_date()

これは Oracle ではうまく機能しますがdbo.、SQL Server で実行すると接頭辞がありません。

Springはそれを処理できるはずですか? 他にどのようなオプションがありますか? DBタイプを自分で決定する必要はないと思います。

ありがとうございました!

4

3 に答える 3

3

すべての JDBC ドライバーは、JDBC 関数エスケープをサポートする必要があります (セクション 13.4.1 で定義され、JDBC 4.1 仕様の付録 D にリストされています)。またはCURRENT_DATEです。_CURRENT_DATECURRENT_DATE()

これをクエリで次のように呼び出すことができます

SELECT col1, col2 FROM table WHERE colDate < {fn CURRENT_DATE}

特定のドライバーのサポートされている機能のリストを照会するには、DatabaseMetaData.getTimeDateFunctions()

ところで:これは、データベースの現在の日付だけが必要であると想定しています。クエリでユーザー定義関数を呼び出すための一般的なソリューションではありません。

于 2012-12-20T15:19:04.200 に答える
1

Springはそれを処理できるはずですか?

-->get_current_date()データベースのメソッド/手順 (データベースまたはカスタムの可能性があります) であるため、データベースに依存します。Spring はそれを処理しません。

他にどのようなオプションがありますか?

--> 現在の日付をコードのクエリに入れることができるので、使用するデータベースに依存しません。何かのようなもの :

String sql = "SELECT col1, col2 FROM table WHERE colDate < " + new Date();
于 2012-12-20T14:54:08.717 に答える
0

次のようなJavaで現在の日付を取得するのはどうですか:

Calendar cal = Calendar.getInstance();
currentDate = cal.getTime();

and then you do:

SELECT col1, col2 FROM table WHERE colDate < currentDate
于 2012-12-20T15:05:48.853 に答える