Scala动态生成日期二元组数组构建JDBC查询条件
Scala动态生成日期范围元组实现方案
我们直接基于JDK自带的java.time日期工具库实现即可,无需引入第三方依赖,完整实现如下:
import java.time.LocalDate import java.time.format.DateTimeFormatter import scala.collection.mutable.ArrayBuffer def predicateRange(start_date: String, end_date: String): Array[(String,String)] = { // 定义标准日期格式 val dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd") // 输入字符串转日期对象 val startDt = LocalDate.parse(start_date, dtf) val endDt = LocalDate.parse(end_date, dtf) val result = ArrayBuffer[(String, String)]() var current = startDt // 按[当日, 次日]的规则迭代生成区间,每次步进2天 while (current.isBefore(endDt) || current.isEqual(endDt)) { val intervalEnd = current.plusDays(1) result += (current.format(dtf) -> intervalEnd.format(dtf)) current = current.plusDays(2) } result.toArray }
使用示例
// 传入起止日期调用方法,生成的结果和硬编码效果完全一致 val predicates = predicateRange("2021-05-16", "2021-05-21") .map { case (start, end) => s"cast(NEW_DT as date) >= date '$start' AND cast(NEW_DT as date) <= date '$end'" }
如果后续需要调整区间长度或者步进间隔,仅需要修改对应plusDays的参数即可。
内容的提问来源于stack exchange,提问作者Swastik Mohanty
相关产品推荐
相关产品推荐

