Не преобразование функции yearweek с QueryDSL

Я хотел бы использовать функцию yearweek() QueryDSL, которая поддерживается QueryDSL. Эта функция генерирует запрос select year(table1.timestamp)*100 + week(table1.timestamp) as col_0_0_ [...]. Однако это не возвращает правильный результат по окончанию года. Я уже открыл отчет об ошибке по этой проблеме.

Я бы предпочел использовать встроенную функцию SQL yearweek(), которая напрямую поддерживается, например. МарияДБ. Есть ли способ использовать функцию SQL YEARWEEK(timestamp) с QueryDSL? Или можно использовать пользовательскую функцию SQL с QueryDSL, например. задан как строка?


Вот пример того, как две реализации возвращают разные результаты по окончанию года:

SELECT YEARWEEK("2018-01-01");
→ returns 201753, correct

SELECT YEAR("2018-01-01") * 100 + WEEK("2018-01-01")
→ returns 201800, incorrect

person ssc-hrep3    schedule 04.06.2018    source источник


Ответы (1)


Я нашел ответ на этот вопрос в этом ответе StackOverflow. Вы можете использовать шаблон для этой задачи.

Я использовал следующий шаблон для создания числового выражения с функцией SQL yearweek:

Expressions.numberTemplate(Integer.class, "yearweek({0}, 3)", table1.timestamp);
person ssc-hrep3    schedule 04.06.2018