SQL最长前缀String

时间:2011-10-23 14:59:34

标签: java mysql sql string longest-prefix

我有一个循环,通过DAO执行N次查询。在我的例子中,我有一个对象,其属性值为“123456789”。在第一个回合中,它对特定表执行查询以获取列C1等于“123456789”的所有记录。

在第二轮中,它在同一个表上执行查询,以获取列C1等于“12345678”的所有记录。依此类推,直到找到具有最长前缀的记录。

我认为不是多次执行此查询,为什么不执行一次另一个查询,将参数作为字符串“123456789”并返回具有最长前缀列C1的记录“123456789”。但我不知道如何使用Hibernate(如果可能),或者如果你有另一个解决方案。我正在使用MySQL。

(我看过这个post,但我想知道是否有办法用Hibernate做到这一点。)

1 个答案:

答案 0 :(得分:2)

您可以执行如下的SQL:

select * from table where 1234567 like concat(c1,'%') order by c1 desc limit 1;

基本上,您将从SQL返回的最长值与给定参数匹配。如果需要,可以使用setMaxResults代替limit和operator ||列连接,如:

...
Query query = session.createQuery("from Prefixes where :parameter like Prefixes.prefix || '%' order by Prefixes.prefix desc");
query.setParameter("parameter", 1234567);
query.setMaxResults(1);
Prefixes p = (Prefixes)query.uniqueResult();
...