在Querydsl中等效的“左”和“右”SQL字符串操作函数?

时间:2013-10-14 13:15:28

标签: querydsl

我有一个与此类似的SQL语句:

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

工作正常,它首先取my_string_column最右边的10个字符,然后从中获取这十个字符的前五个字符。我试图在Querydsl中找到相应的内容,例如:

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

但没有“左”和“右”的方法。我怎么会在Querydsl中写这个呢?谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

Querydsl中尚未实现左/右支持。您可以使用子字符串(0,大小)轻松模拟左侧,但右侧更加棘手,我建议为它创建一个票证。