[英]How to create variable pattern matching for database lookup?
我想找一个表格行,其中所需的值具有A9-B19-C12-D1
。 因此,变量字母后跟可变数字,由-
每个分开。 长度不固定,例如它也可能只有A9
或A9-D1
。
我只关心这些信件。 现在我有4个字母A, B, C, D
,我想对postgres
db运行一个查询,上面有一个格式的条目。
我会用下面的陈述这样做吗?
SELECT * FROM mytable t WHERE t.entry LIKE 'A%B%C%D%';
如果这是正确的:我怎么能制定一个NamedQuery
,我可以将字母作为可变参数提供?
您可以尝试在PostgreSQL中使用regexp_replace
函数。 基本上,使用select regexp_replace('A9-B19-C12-D1', '[0-9]|-', '','g') as letters
返回一个ABCD
字符串。
同样, select regexp_replace('A9-D1', '[0-9]|-', '','g')
返回AD
。
使用此信息,您可以根据regexp_replace函数输出编写查询。 即, SELECT * FROM mytable t WHERE regexp_replace(t.entry, '[0-9]|-', '','g')='ABCD' ;
。
我相信你也可以在其功能输出上索引一个表列 - 但我会留给你研究。 您还可以查看使用SQL函数返回设置用户定义的函数(我认为这就是命名查询的含义)。
请参见SQL小提琴示例
尝试使用SIMILAR TO
和reqular表达式A\\d+(-B\\d+(-C\\d+(-D\\d+)?)?)?
@NamedNativeQueries({
@NamedNativeQuery(
name = "finDesiredData",
query = "select * from mytable t where t.entry SIMILAR TO :ent",
resultClass = MyTable.class
)
})
我个人会使用java StringBuffer
将字母连接成正确的正则表达式。
嗯,我不知道我是否理解你的问题,但你可以像这样设置namedQuery:
query.setParamter("param1", "%" + 9 + "%");
query.setParamter("param2", "%" + 1 + "%");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.