функции столбца в Jooq для разделения строк - PullRequest
0 голосов
/ 19 сентября 2018

Я использую Jooq.У меня есть поле в базе данных, которая содержит длинные строки.Я хочу применить строковые функции к возвращаемым значениям из оператора select, чтобы значения возвращались в помеченном столбце.Вот пример:

select STAT_NAME, STAT_COUNT, AVERAGE, HALF_WIDTH, SIM_RUN_ID_FK
FROM ACROSS_REP_STAT
where STAT_NAME like '%:Queue%'
ORDER BY STAT_NAME, SIM_RUN_ID_FK;

В приведенном выше запросе STAT_NAME является действительно длинной строкой.Предположим, я хочу извлечь подстроку возвращаемой строки в виде столбца:

select SUBSTRING(STAT_NAME, 1, 4) AS Something, STAT_NAME, STAT_COUNT, 
  AVERAGE, HALF_WIDTH, SIM_RUN_ID_FK
FROM ACROSS_REP_STAT
where STAT_NAME like '%:Queue%'
ORDER BY STAT_NAME, SIM_RUN_ID_FK;

Как мне построить оператор jooq для чего-то подобного?

Предположим, что я хотел использовать позицию() функция из DSL для создания индекса, например, 4 в переменной функции substring ().Функция position () возвращает поле.У меня возникают проблемы при получении что-то вроде этого:

substring(STAT_NAME, 1, position(STAT_NAME, ":"))

для работы, потому что substring () ожидает int, а не поле


Теперь я вижу, что я вызываю substring () сint и Field и что для этого нет сигнатуры метода, но она есть для

substring (Поле Field, Поле startPosition, Длина поля)

Как повернуть, начиная с 1в поле?

1 Ответ

0 голосов
/ 19 сентября 2018

Класс org.jooq.impl.DSL содержит все необходимые функции.В вашем случае DSL.substring().Как правило, вы просто статически импортируете все методы из этого класса

import org.jooq.impl.DSL.*;

и используете функции, как в SQL

ctx.select(substring(ACROSS_REP_STAT.STAT_NAME, 1, 4).as("Something"), ...)
   .from(...)
   ...

Или, учитывая ваш обновленный вопрос:

ctx.select(substring(
        ACROSS_REP_STAT.STAT_NAME, 
        inline(1), 
        position(ACROSS_REP_STAT.STAT_NAME, ":")).as("Something"), ...)
   .from(...)
   ...
...