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

如何从数据库获取当前周的毫秒级时间戳数据?

提取数据库中当前周的毫秒级时间戳数据

下面针对主流数据库给出具体实现方案,适配毫秒级时间戳的场景:

MySQL/MariaDB

先把毫秒时间戳转成秒级,再转成日期格式,然后匹配当前周和年份(避免跨年时的周数冲突):

SELECT *
FROM your_table
WHERE WEEK(FROM_UNIXTIME(your_timestamp / 1000)) = WEEK(CURDATE())
  AND YEAR(FROM_UNIXTIME(your_timestamp / 1000)) = YEAR(CURDATE());

如果你的业务以周一作为一周的起始日,修改WEEK函数的第二个参数为1即可:

WEEK(FROM_UNIXTIME(your_timestamp / 1000), 1) = WEEK(CURDATE(), 1)

PostgreSQL

用TO_TIMESTAMP将毫秒时间戳转成可识别的日期,再提取周数和年份做匹配:

SELECT *
FROM your_table
WHERE EXTRACT(WEEK FROM TO_TIMESTAMP(your_timestamp / 1000)) = EXTRACT(WEEK FROM CURRENT_DATE)
  AND EXTRACT(YEAR FROM TO_TIMESTAMP(your_timestamp / 1000)) = EXTRACT(YEAR FROM CURRENT_DATE);

如果需要遵循ISO周标准(周一为起始),把WEEK替换成ISOWEEK即可:

EXTRACT(ISOWEEK FROM TO_TIMESTAMP(your_timestamp / 1000)) = EXTRACT(ISOWEEK FROM CURRENT_DATE)

SQL Server

通过DATEADD把毫秒时间戳转成datetime类型,再提取周数和年份:

SELECT *
FROM your_table
WHERE DATEPART(WEEK, DATEADD(ms, your_timestamp, '1970-01-01')) = DATEPART(WEEK, GETDATE())
  AND DATEPART(YEAR, DATEADD(ms, your_timestamp, '1970-01-01')) = DATEPART(YEAR, GETDATE());

要设置周一为一周起始日,先执行SET DATEFIRST 1;再运行查询。

MongoDB

用$toDate直接解析毫秒时间戳,再通过$week和$year匹配当前周数据:

db.your_collection.find({
  $expr: {
    $and: [
      { $eq: [{ $week: { $toDate: "$your_timestamp" } }, { $week: new Date() }] },
      { $eq: [{ $year: { $toDate: "$your_timestamp" } }, { $year: new Date() }] }
    ]
  }
})

如果需要ISO周(周一起始),把$week换成$isoWeek即可。

注意事项

  • 时区适配:如果数据库和应用时区不一致,要在时间转换时指定时区,比如MySQL的FROM_UNIXTIME支持时区参数,PostgreSQL/SQL Server用AT TIME ZONE语法,避免出现数据偏差。
  • 跨年场景:必须结合年份判断,不然会把去年同周的数据也捞出来,影响图表准确性。

内容的提问来源于stack exchange,提问作者Mark Delphi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:04:50