2013-10-10 11 views
5

Sono avere un piccolo problema per esporre:funzione di HQL per estrarre le righe con il campo contiene solo il numero

Voglio estrarre da un soggetto, supponiamo che il suo nome "CustomerDetail" tutte le righe in cui un campo specifico (codice) ha solo caratteri numerici.

In HQL non esiste la funzione ISNUMERIC() come il server Sql e la possibilità di applicare la funzione regex.

Una soluzione possibile è la seguente:

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

e così via ripetendo questa condizione lettera complessiva alfabetical e quelli speciali.

penso che questa è una soluzione povera, con un basso livello di prestazioni (numero enorme di SIMILI)

Ti prego, mi puoi consigliare una soluzione più intelligente?

Grazie in anticipo

P.S. La mia applicazione è multi DBMS quindi non posso usare la query SQL

risposta

1

Modifica principale: Il mio male, ho scambiato la funzione appena funzionante isNumeric() per una funzione HQL che è errata. Secondo l'doc HQL supporta le funzioni scalari del database e SQLServer (su cui ho testato) ha una funzione isNumeric().

Vedo due opzioni ora:

Opzione 1: È possibile scrivere HQLs diversi per diversi database che utilizza la configurazione in funzioni come isNumeric() su SQLServer (ma questo è un enorme passo indietro in termini di "scrivo una volta eseguito ovunque ")

Opzione 2: Scrivere per ogni database che si desidera essere compatibile con una funzione personalizzata in SQL e registrarlo con lo stesso nome nel dialetto.

Lo so, entrambe le opzioni non sono eccezionali ma non riesco a pensare a nessun altro modo per farlo funzionare.

+0

Caro, HQL non ha isNumeric (come ho scritto nella mia domanda) –

+0

HA PROVATO la mia soluzione (incluso '= 1')? Perché, come ho scritto nella mia risposta, funziona ... –

+0

Prima di scrivere una domanda ... provo il mio codice. Questo è il capitolo 14 di HQL: http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html Mostra le funzioni consentite. –

Problemi correlati