postgresql - 使用 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
}
}
}
推荐阅读
- javascript - PHP里面的Javascript If函数?
- google-colaboratory - VQGAN + Clip Colab Pro:无法解析主机:mirror.io.community
- react-native - 如何在反应原生应用程序中打开铃声偏好
- javascript - 在反应中使用antd表时将第一个输入的值设置为第二个输入
- angular - Angular 组件中未调用 RxJs 计时器订阅
- python - 诗歌:使用python时如何找到根库?
- php - 为循环中的每个第 3 项和第 4 项添加一个结束 html 标记
- c++ - C++ std::chrono::high_resolution_clock time_since_epoch 返回的数字太小。如何获得自 1970 年以来的正确时间(以微秒为单位)?
- django - 在 django 的函数中调用序列化程序的更新
- variables - 使用生成字符串的函数覆盖类型为“string”的“defcustom”