2013-10-14 4 views
0

У меня есть SQL заявление, похожее на это:Эквивалент функций «левого» и «правого» SQL-манипуляций в Querydsl?

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

отлично работает, он первый принимает самые правые 10 символов my_string_column, и от того, дает мне первые пять символов этих десяти символов. Я пытаюсь найти эквивалент этого в Querydsl, что-то вроде:

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

Но нет никаких «левых» и методов «правых». Как бы я написал это в Querydsl? Благодаря!

ответ

1

Моя рекомендация - использовать функцию подстроки. Вот пример, который я получил, чтобы локально работать с 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 
+0

Спасибо. У меня были проблемы с получением части вашего решения для работы (https://github.com/mysema/querydsl/issues/520), но Тимо не смог воспроизвести, поэтому я принимаю этот ответ. –

0

левая/правая поддержка еще не реализована в Querydsl. Вы можете легко эмулировать левые с помощью подстроки (0, размер), но право более сложное, и я предлагаю создать для него билет.

+0

Создано: (https://github.com/mysema/querydsl/issues/519), спасибо. –

Смежные вопросы