我有一个varchar
字段,如1-2-55-9
,由-
分隔的数字
如何在hibernate
或querydsl
或jpa
中进行查询以检查某个号码是否在此字段中?
select * from x where TEST
如果举例55 -> yes return record
,5 -> no
,7-> no
答案 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的差异。