Kotlin Exposed查询可空datetime字段时如何匹配null值?
实现代码
你只需要在includeCurrent的条件分支中,用Exposed提供的or逻辑运算符,将日期大于当前时间的条件和myDate为空的条件组合即可,推荐直接用内置的isNull()方法简化空值判断,修改后的查询逻辑如下:
val query = MyTable.select { val now = DateTime.now() // 抽离公共变量避免多次计算生成不一致的时间值 when { includeCurrent && includeEnded -> Op.TRUE includeCurrent -> (MyTable.myDate.greater(now)) or (MyTable.myDate.isNull()) includeEnded -> MyTable.myDate.less(now) else -> Op.FALSE } }
补充说明
- 用括号包裹两个条件是为了避免运算符优先级导致的逻辑错误,保证两个条件是平级的或关系
- 如果你坚持要用
eq方法匹配空值,也可以替换为MyTable.myDate.eq<DateTime?>(null),效果和isNull()完全一致 - 如果后续需要在其他分支也包含空值条目,用同样的
or拼接空判断条件即可
内容的提问来源于stack exchange,提问作者JohnDoe
相关产品推荐
相关产品推荐

