2

私が使用する前に:

entityManagerFactory.createQuery("select p FROM Pays p where SUBSTRING(p.libeleClient, 0,1)

しかし、このクエリを使用すると:

entityManagerFactory.createQuery("select p FROM Pays p where SUBSTR(p.libeleClient, 0,1)

例外が発生します:(

SUBSTRING を SUBSTR で置き換えるのは誰ですか?

4

3 に答える 3

4

SUBSTR は Oracle の関数です。

SUBSTRING は MySql の関数です

あなたが使用しているDBに依存します

編集:

以下のようにJavaコードを編集してみてください

String query = "select p FROM Pays p where SUBSTRING(p.libeleClient, 0,1)";


        // from Connection Object (connection)
        DatabaseMetaData meta = connection.getMetaData();
        //If the DB is Oracle 
          if(meta.getDatabaseProductName()).contains("Oracle")) {
              entityManagerFactory.createQuery(query.replace("SUBSTRING", "SUBSTR"));
          }// If the DB not Oracle , any Other like MySql 
          else {
              entityManagerFactory.createQuery(query);
          }
于 2012-10-15T09:16:58.693 に答える
2

substring は、SQL 標準 ISE:IEC 9075:1992 で定義されている SQL 操作です。

substr は、Oracle で使用される古い構文です。この間違った構文は、実際の英単語の sql 使用法と完全に矛盾しており、略語ではありません。

Oracle はまだ標準構文をサポートしていません。

標準構文をサポートするためにオラクルでハックを書いた人はいますか?

于 2014-03-26T12:57:24.220 に答える
0

どの例外が発生したかはわかりませんが、構文エラーだと思います。Oracle の SUBSTR() の正しい構文は ...

where SUBSTR(p.libeleClient, 0,1) = 'X'

...(または何でも)。これは、1 つの文字が等しくなければならない最初の出現です。ある特定の値。SUBSTR() はブール関数ではありません。

一方、SUBSTRING() はオラクル関数ではありません。他のデータベースから構文を借用したか、それに気付かずに特注の関数を使用しています。


「あなたの提案を試しましたが、うまくいきません」

エラーが出ますか?それとも、レコードを返さないということですか? ドキュメントで定義されているように、完全に有効な使用法を示しているためです。しかし、データの例を示していないため、データベースから行を返すソリューションを提供することはほとんど不可能です.

于 2012-10-15T09:20:34.003 に答える