0

次のような SQL ステートメントがあります。

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

正常に動作し、最初に の右端の 10 文字をmy_string_column取得し、そこから 10 文字の最初の 5 文字を取得します。私はこれに相当するものをQuerydslで見つけようとしています。

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

しかし、「左」と「右」の方法はありません。代わりに、これを Querydsl でどのように記述しますか? ありがとう!

4

2 に答える 2

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
于 2013-10-14T18:31:33.473 に答える