首页 > 解决方案 > 使用 Kotlin Exposed 删除带有复杂过滤器的查询

问题描述

我正在创建一个删除查询,我需要在其中调用本机 Postgres 函数来过滤应删除的记录。

总之,查询如下:删除所有 start_at 列(时间戳)超过 5 天的记录(查询的动态参数)

对于原生 SQL,查询如下:

delete from my_table t where date_part ('day', (current_date - t.start_at))> = 5

在我的 Kotlin 编码中,我无法实现此查询。公开文档中的示例没有具有更复杂过滤器的代码。我知道它是这样的:

(1)

transaction {
   MyTable.deleteWhere {
     MyTable.startAt greaterEq ??????
   }
}

或者

(2)

transaction {
   exec ("delete query here> = $ {daysToFilter}")
}

有没有办法在示例 (1) 之后的代码中执行此查询?如果不是,那么执行此查询的最佳方法是什么?

样本数据集:

ID start_at
1 2020-09-01 09:00:00
2 2020-09-02 09:00:00
3 2020-09-03 09:00:00
4 2020-09-04 09:00:00

标签: postgresqlkotlinkotlin-exposed

解决方案


最终解决方案如下:

fun my_function(days: Int) {
    val startAt = DateTime.now()
                .withTimeAtStartOfDay()
                .minusDays(days)

    transaction {
        MyTable.deleteWhere {
            MyTable.startAt greaterEq startAt         
        }     
    } 
}

推荐阅读