0

我正在学习这个很棒的库,但是虽然简单的查询有效,但我很困惑如何编写库常见问题解答中没有的东西。

例如,

create table if not exists ticks
(id bigserial not null constraint ticks_pkey primary key,
    timestamp timestamp not null
);

可以写类似的东西

select coalesce(max(id), 0) from ticks where timestamp::date = ?

实际上,我在这里有两个问题

  1. column.max()没有任何合适的修饰符,例如function()不接受任何参数。可能,我可以在获取行后在代码中模拟它。

  2. 我不知道如何在where进行强制转换或编写任意where条件。

4

1 回答 1

0

如果可以将对象映射到现有表,那么您可以尝试以下操作:

object Ticks : LongIdTable() {
    val timestamp = datetime("timestamp ")
}

fun Expression<DateTime>.pgDate() = object : org.jetbrains.exposed.sql.Function<DateTime>(DateColumnType(false)) {
    override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
        append(this@pgDate, "::date")
    }
}

val expr =  Coalesce(Ticks.id.max(), longLiteral(0))
Ticks.slice(expr).select {
    Ticks.timestamp.pgDate() eq DateTime.parse("2019-01-01")
}
于 2019-11-20T08:15:00.433 回答