检查数字是否在字符串中

时间:2015-05-26 18:32:42

标签: hibernate jpa querydsl

我有一个varchar字段,如1-2-55-9,由-分隔的数字

如何在hibernatequerydsljpa中进行查询以检查某个号码是否在此字段中?

select * from x where TEST

如果举例55 -> yes return record5 -> no7-> no

,可以进行哪些测试

1 个答案:

答案 0 :(得分:0)

您的问题有一些解决方案,最佳解决方案取决于varchar的所有可能值。 通常,您需要使用字符串模式匹配

假设varchar包含:

1-2-55-9
7-8-55-5
3-A-55-4

您可以使用以下字符串模式:

_-_-55-_  // underscore wildcard character _ substitutes a single character

然而,在以下情况下它将停止工作:

1-2-55-99
1-22-55-9
11-2-55-99
123-200-55-A

为了更灵活,您可以用

替换上面的字符串模式
%-%-55-%  // percent wildcard character % substitutes multiple characters

正如以上评论中所建议的那样,JPQL LIKE表达式应该是你应该遵循的方式,例如:

SELECT e FROM MyEntity e WHERE e.varchar LIKE '_-_-55-_'   -- or '%-%-55-%'

您可以选择使用JPQL LOCAL表达式进行试验,例如:

SELECT e FROM MyEntity e WHERE LOCATE('-55-', e.varchar, 3) > 0

使用这两个查询,您可能会发现性能,灵活性以及JPA如何将给定查询转换为本机SQL的差异。