2013-10-10 25 views
5

我已經有一個小問題暴露:HQL功能與現場提取的行只包含數

我想從一個實體提取,假設它的名字「爲CustomerDetail」的所有行的特定字段(代碼)只有數字字符。

在HQL中不存在像Sql Server這樣的ISNUMERIC()函數,以及應用正則表達式函數的可能性。

一種可能的方案是:

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

等重複該條件總體alfabetical字母和特殊字符。

我認爲這是一個貧窮的解決方案,具有低級別的性能(巨大LIKE數)

,能不能請您諮詢我更聰明的解決方案?

謝謝您提前

P.S.我的應用程序是多數據庫管理系統,所以我不能使用SQL查詢

回答

1

重大編輯: 我的錯誤,我誤以爲正確的工作函數isNumeric()爲HQL函數是錯誤的。 根據doc HQL支持數據庫標量函數 - 而SQLServer(我測試過)具有isNumeric()函數。

我現在看到兩個選項:

選項1: 你可以寫不同的數據庫不同HQLs它利用構建在像SQLServer的ISNUMERIC()函數(但是這是一個巨大的倒退來講「寫一次運行到任何地方「)

選項2: 爲每個想要符合SQL自定義函數的數據庫編寫代碼,並在您的方言中使用相同的名稱進行註冊。

我知道,這兩個選項都不是很了不起,但我想不出任何其他方式來使它工作。

+0

親愛的,HQL has'n got isNumeric(正如我在我的問題中寫的) –

+0

您是否試過我的解決方案(包括'= 1')?因爲,就像我在我的答案中寫的 - 它的工作原理... –

+0

在我寫一個問題之前...我嘗試我的代碼。這是HQL的第14章:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html顯示允許的函數。 –