#java #postgresql #jooq
#java #postgresql #jooq
Вопрос:
При загрузке отрицательного Interval
значения из базы данных Postgresql и преобразовании его в миллисекунды его знак игнорируется, и я получаю положительное значение. Я конвертирую YearToSecond
с doubleValue()
помощью .
@Test
void testYearToSecondNegativeInterval()
{
assertThat(YearToSecond.valueOf(2).doubleValue()).isEqualTo(2);
assertThat(YearToSecond.valueOf(-2).doubleValue()).isEqualTo(-2);
YearToSecond minus9802 = YearToSecond.valueOf("-0-0 0 00:00:09.082000000");
assertThat(minus9802.doubleValue()).isEqualTo(-9802);
}
Этот модульный тест завершается с ошибкой:
org.opentest4j.AssertionFailedError:
Expecting:
<9082.0>
to be equal to:
<-9802.0>
but was not.
Я получил String
представление ( -0-0 0 00:00:09.082000000
) из сеанса отладки.
При запросе отображается то же значение -00:00:09.082
, что и with intervalstyle = 'sql_standard'
и PT-9.082S
with intervalstyle = 'iso_8601'
.
Ответ №1:
Возможным обходным путем является прямая выборка значения в виде миллисекунд:
create.select(DSL.extract(TABLE.COLUMN, DatePart.EPOCH)
.mul(1000)
.cast(Integer.class))
.from(COLUMN)
Но это означает дополнительную работу, потому что необходимо извлечь дополнительное поле по сравнению с преобразованием YearToSecond
.