You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark Scala如何筛选距今2个月内epoch格式创建时间数据

问题解决方法

首先明确基础判断:从你给出的示例值长度看,creation_date_epoch存储的是13位毫秒级epoch时间戳,不是常见的10位秒级时间戳,这是写过滤条件时首先要对齐的单位,否则查询结果会完全错误。

核心过滤逻辑非常直接:计算出「当前时间往前推2个月的时间点对应的毫秒级时间戳」,只要表中creation_date_epoch字段值大于等于这个阈值,就是符合要求的记录。


各场景具体实现

直接在SQL中计算(推荐)

直接用数据库内置日期函数计算阈值,不需要应用层额外处理,能自动适配不同月份的天数差异,结果最准确。

  • MySQL 写法:
SELECT * FROM 你的表名
WHERE creation_date_epoch >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 2 MONTH)) * 1000;

末尾乘1000是因为UNIX_TIMESTAMP()默认返回秒级时间戳,转成毫秒才能和你存储的字段单位对齐。

  • PostgreSQL 写法:
SELECT * FROM 你的表名
WHERE creation_date_epoch >= EXTRACT(EPOCH FROM (NOW() - INTERVAL '2 MONTH')) * 1000;
  • ClickHouse 写法:
SELECT * FROM 你的表名
WHERE creation_date_epoch >= toUnixTimestamp(now() - INTERVAL 2 MONTH) * 1000;

应用层计算阈值后传入SQL

如果需要在业务代码里先算好阈值再拼SQL,不要直接硬写2个月=60天的固定毫秒值,会因为大小月、闰年出现偏差,要用日期工具类按自然月偏移计算,以Java为例:

// 准确计算2个月前的毫秒级时间戳
long threshold = LocalDateTime.now()
        .minusMonths(2)
        .atZone(ZoneId.systemDefault())
        .toInstant()
        .toEpochMilli();
// 把threshold作为参数传入SQL,执行WHERE creation_date_epoch >= ?即可

示例数据验证

假设查询时的当前时间为2022-05-01,计算出的2个月前阈值约为1646064000000(对应2022-03-01 00:00:00),匹配到的符合条件的记录为:

  • {id: 1234, creation_date_epoch: 1651300805244}
  • {id: 4567, creation_date_epoch: 1651340257517}
  • {id: 5678, creation_date_epoch: 1651348676929}

其余记录的创建时间均早于2个月前的阈值,会被正常过滤。

注意:如果你的字段存的是10位秒级时间戳,所有SQL里乘1000的操作都要去掉,直接用函数返回的秒级时间戳比较即可。

内容的提问来源于stack exchange,提问作者Jericho Sims

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:18:15