使用 Oracle 数据库处理 JPQL 中的空字符串



我正在尝试编写一个适用于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

最新更新