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

Elastic SQL中ticks转datetime失败,分组统计月份异常求助

解决Elastic SQL中Ticks转Datetime并按月份分组统计的问题

问题原因分析

核心问题是对Elastic SQL中DATETIME类型的转换规则理解有误:

  • Elastic SQL要求CAST(数值 AS DATETIME)的输入是Unix毫秒级时间戳(从1970-01-01 UTC开始计算的毫秒数)。
  • 你之前的转换逻辑把Ticks转成了秒数,数值量级太小,所以全部被解析为1970-01-01。
  • .NET Ticks(100纳秒为单位)转Unix毫秒时间戳的正确公式是:(Ticks值 - 621355968000000000) / 10000——其中621355968000000000是1970-01-01对应的.NET Ticks,除以10000是因为1毫秒=10000个Ticks(1 Tick=100纳秒)。

修正后的查询语句

调整转换逻辑为正确的毫秒级时间戳计算,同时用别名简化分组语句:

SELECT
  MONTH_NAME(CAST((Created - 621355968000000000) / 10000 AS DATETIME)) AS month_name,
  COUNT(*) AS entity_count
FROM "{elastic-source}"
WHERE Created >= 638081280000000000 AND Created <= 638395776000000000
GROUP BY month_name
ORDER BY month_name

补充说明

  • 你测试的CAST(0 AS DATETIME)等语句返回1970-01-01是正常的:0对应Unix时间戳起始点,1对应1970-01-01 00:00:00.001,1000对应00:00:01,只是Elastic SQL默认只显示日期部分,所以看起来都是同一天。
  • 若需要更精确的时间显示,可使用FORMAT_DATETIME函数指定格式,比如FORMAT_DATETIME(CAST(...) AS DATETIME, 'yyyy-MM-dd HH:mm:ss')。

内容的提问来源于stack exchange,提问作者Marin Takanov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:43:40