我有一个小问题需要揭露:
我想从一个实体中提取,假设它的名字" CustomerDetail"特定字段(代码)只有数字字符的所有行。
在HQL中,不存在ISNUMERIC()函数,如Sql Server,以及应用正则表达式函数的可能性。
可能的解决方案如下:
SELECT C
FROM CustomerDetail C
WHERE C.code NOT LIKE '%A%'
AND C.code NOT LIKE '%B%'
等重复这个条件整体alfabetical字母和特殊字符。
我认为这是一个糟糕的解决方案,性能水平低(大量的LIKE)
拜托,您能告诉我一个更聪明的解决方案吗?
提前谢谢
P.S。我的应用程序是多DBMS,因此我无法使用SQL查询
答案 0 :(得分:1)
主要编辑: 我的坏,我误认为正常工作函数isNumeric()用于错误的HQL函数。 根据{{3}} HQL支持数据库标量函数 - 和SQLServer(我测试过)有一个isNumeric()函数。
我现在看到两个选项:
选项1: 您可以为不同的数据库编写不同的HQL,这些数据库利用SQLServer上的isNumeric()等函数构建(但就“一次编写运行”而言,这是一个巨大的退步)
选项2: 为每个要与SQL中的自定义函数兼容的数据库编写,并在方言中使用相同的名称进行注册。
我知道,两种选择都不是很好但我想不出任何其他方法可以让它发挥作用。