繁体   English   中英

如何为数据库查找创建变量模式匹配?

[英]How to create variable pattern matching for database lookup?

我想找一个表格行,其中所需的值具有A9-B19-C12-D1 因此,变量字母后跟可变数字,由-每个分开。 长度不固定,例如它也可能只有A9A9-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM