【问题标题】:SQL longest prefix StringSQL最长前缀字符串
【发布时间】:2011-10-23 14:59:33
【问题描述】:

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

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

我想,与其多次执行这个查询,不如只执行一次另一个查询,它以字符串“123456789”为参数并返回具有列C1的记录,这是“的最长前缀” 123456789”。但我不知道如何使用 Hibernate(如果可能)来做到这一点,或者您是否有其他解决方案。我正在使用 MySQL。

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

【问题讨论】:

    标签: java mysql sql string longest-prefix


    【解决方案1】:

    你可以像这样执行一条sql:

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

    基本上,您将采用与给定参数匹配的 SQL 返回的最长值。如果您愿意,可以使用 setMaxResults 代替限制和运算符 ||连接列,例如:

    ...
    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();
    ...
    

    【讨论】:

    • 感谢您的回答,它有效!但是,我有两个问题:首先,使用 concat() 和 || 有什么区别?另外,这个 HQL 语句是否可以在不同的 DBMS 之间移植?
    • 据我所知,||是hibernate,也就是说会被翻译到每个数据库都有自己的功能。 concat 将被传递并适用于特定的数据库。
    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 2012-01-24
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 2019-05-03
    • 2019-10-11
    • 2011-10-21
    相关资源
    最近更新 更多