从Postgresql数据库加载负Interval
并将其转换为毫秒时,它的符号被忽略,我得到一个正值。我正在用doubleValue()
转换YearToSecond
。
@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
与intervalstyle = 'sql_standard'
和PT-9.082S
与intervalstyle = 'iso_8601'
。
一个可能的解决方法是直接获取以毫秒为单位的值:
create.select(DSL.extract(TABLE.COLUMN, DatePart.EPOCH)
.mul(1000)
.cast(Integer.class))
.from(COLUMN)
但这意味着额外的工作,因为与转换YearToSecond
相比,必须提取额外的字段。