我正在尝试编写一个适用于Oracle,MySQL或SQL Server的JPQL查询。它应该找到字符串字段不为空或为空的所有项目。在 MySQL 上,
select x from Examples x where (x.foo != '' and x.foo IS NOT null)
工作正常。但是,由于 Oracle 将空字符串转换为 null 的方式,!= '' 位总是返回 false,因此即使几乎没有任何字符串为空,我也不会得到任何结果。我可以检测用户正在使用哪种数据库,并为每个数据库编写不同的东西,但是拥有三倍的JPQL并不是很好。有没有办法在JPQL中处理空字符串,也适用于Oracle?
我可以找到很多相关的问题,例如:
甲骨文中的空字符串与空字符串
为什么 Oracle 9i 将空字符串视为 NULL?
https://dba.stackexchange.com/questions/49744/oracle-empty-string-converts-to-null
但没有真正关于如何处理它,尤其是在 JPQL 中。有人找到解决这个问题的方法吗?
这是一个有点肮脏的解决方案,但不是:
x.foo != ''
您可以使用:
length(x.foo || ' ') > 1