5

公開する小さな問題があります:

エンティティから抽出したいのですが、その名前が「CustomerDetail」で、特定のフィールド (コード) に数字のみが含まれるすべての行があるとします。

HQL には SQL Server のような ISNUMERIC() 関数が存在せず、正規表現関数を適用する可能性があります。

考えられる解決策は次のとおりです。

SELECT C
FROM CustomerDetail C
WHERE C.code NOT LIKE '%A%'
AND C.code NOT LIKE '%B%'

など、この条件を繰り返します。全体的にアルファベットと特殊文字。

これはパフォーマンスのレベルが低い(膨大な数のLIKE)、貧弱なソリューションだと思います

もっとスマートな解決策を教えてください。

前もって感謝します

PS 私のアプリケーションはマルチ DBMS なので、SQL クエリを使用できません

4

2 に答える 2

1

主な編集: 私の悪い、ちょうど動作している関数 isNumeric() を間違った HQL 関数と間違えました。ドキュメントによると、HQL はデータベースのスカラー関数をサポートしており、SQLServer (私がテストしたもの) には isNumeric() 関数があります。

2 つのオプションが表示されます。

オプション 1: SQLServer の isNumeric() などの組み込み関数を利用する、さまざまなデータベースに対してさまざまな HQL を作成できます (ただし、これは「一度書き込みをどこでも実行する」という点で大きな後退です)。

オプション 2: SQL のカスタム関数に準拠させたいデータベースごとに記述し、方言で同じ名前で登録します。

どちらのオプションも素晴らしいものではないことはわかっていますが、それを機能させる他の方法は考えられません。

于 2013-10-15T11:43:26.777 に答える