【问题标题】:Equivalent of "left" and "right" SQL string manipulation functions in Querydsl?Querydsl 中“左”和“右”SQL 字符串操作函数的等价物?
【发布时间】:2013-10-14 13:15:28
【问题描述】:

我有一个类似这样的 SQL 语句:

select left(right(my_string_column, 10), 5)
from my_table;

工作正常,它首先取my_string_column 最右边的 10 个字符,然后将这 10 个字符中的前 5 个字符提供给我。我试图在Querydsl 中找到与此等效的内容,例如:

myTable.myStringColumn.right(10).left(5)

但是没有“左”和“右”方法。我将如何在 Querydsl 中编写它?谢谢!

【问题讨论】:

    标签: querydsl


    【解决方案1】:

    我的建议是使用 substring 函数。这是我在本地使用 querydsl v3.2.3 的示例:

    QMyTable g = new QMyTable("g");
    query = new SQLQuery(connection , dialect);
    List<Tuple> l = query.from(g).list(g.mystringfield,
            g.mystringfield.substring(g.mystringfield.length().subtract(10),
            g.mystringfield.length() ).substring(0, 5).as("mystringfield5"));
    for (Tuple t : l) {
        System.out.println(t.get(g.mystringfield) + " =====> " + t.get(1, String.class));
    }
    

    生成的查询类似于:

    select g.mystringfield,
    (substr(substr(g.mystringfield,(length(g.mystringfield) - ?)+1,length(g.mystringfield)-(length(g.mystringfield) - ?)),1,5)) as mystringfield5
    from MyTable g
    

    【讨论】:

    【解决方案2】:

    Querydsl 中尚未实现左/右支持。您可以使用 substring(0, size) 轻松模拟 left,但 right 比较棘手,我建议为它创建一张票。

    【讨论】:

      猜你喜欢
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      相关资源
      最近更新 更多