使用 Kotlin Exposed 删除具有复杂过滤器的查询
Delete query with complex filter using 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
最终解决方案如下:
fun my_function(days: Int) {
val startAt = DateTime.now()
.withTimeAtStartOfDay()
.minusDays(days)
transaction {
MyTable.deleteWhere {
MyTable.startAt greaterEq startAt
}
}
}
我正在创建一个删除查询,我需要在其中调用本机 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 |
最终解决方案如下:
fun my_function(days: Int) {
val startAt = DateTime.now()
.withTimeAtStartOfDay()
.minusDays(days)
transaction {
MyTable.deleteWhere {
MyTable.startAt greaterEq startAt
}
}
}