使用JOOQ在PostgreSQL中以秒为单位的时间戳之间的差异求和

时间:2018-08-22 07:28:47

标签: sql postgresql jooq sql-timestamp

这是我的另一个问题(Find difference between timestamps in seconds in PostgreSQL using JOOQ)的后续问题。

我想对TIMETRACKS.ENDTIMETIMETRACKS.STARTTIME的差异求和,以秒为单位。可能会发生数据库中没有任何TIMETRACKS的情况。在这种情况下,数据库应该返回0

这就是TIMETRACKS表的样子:

CREATE TABLE "TimeTracks" (
    "id" uuid PRIMARY KEY,
    "startTime" timestamp NOT NULL,
    "endTime" timestamp,
);

这是我尝试过的一种解决方案:

coalesce(sum(timestampDiff(TIMETRACKS.ENDTIME, TIMETRACKS.STARTTIME)), 0)

但是合并不适用于间隔类型: org.postgresql.util.PSQLException: ERROR: COALESCE types interval and integer cannot be matched

我在StackOverflow上发现的

Another solution实际上对我有用,但似乎有点“复杂”,因为我必须编写一些原始SQL:

coalesce(sum(extractEpochFrom(timestampDiff(TIMETRACKS.ENDTIME, TIMETRACKS.STARTTIME))), 0)

fun extractEpochFrom(field: Field<DayToSecond>): Field<Integer> =
    DSL.field("extract(epoch from {0})", Integer::class.java, field)

是否有不需要我编写原始SQL的有效解决方案?

1 个答案:

答案 0 :(得分:1)

目前唯一可行的解​​决方案是使用here中的普通SQL。

coalesce(sum(extractEpochFrom(timestampDiff(TIMETRACKS.ENDTIME, TIMETRACKS.STARTTIME))), 0)

fun extractEpochFrom(field: Field<DayToSecond>): Field<Integer> =
    DSL.field("extract(epoch from {0})", Integer::class.java, field)