TDengine 函数完整参考 — 聚合、时序、字符串、时间、数学
2026/7/16 18:31:47 网站建设 项目流程

分类:10.SQL 参考 |篇章:03 函数完整参考

适用版本:TDengine v3.x(v3.3.x / v3.4.x) | 最后更新:2026-07-16

TDengine 提供 100+ 内置函数,覆盖聚合、时序专用、字符串处理、时间运算、数学计算、类型转换。本文按类别速查并给出典型用法。

函数速查表

类别代表函数
聚合COUNT, SUM, AVG, MIN, MAX, FIRST, LAST, MODE
统计STDDEV, VAR_POP, PERCENTILE, APERCENTILE, HISTOGRAM
时序DIFF, DERIVATIVE, MAVG, TWA, INTERP, IRATE, STATECOUNT
选择TOP, BOTTOM, SAMPLE, TAIL, UNIQUE
窗口元数据_WSTART, _WEND, _WDURATION, _QSTART, _QEND
字符串CONCAT, SUBSTR, LENGTH, UPPER, LOWER, TRIM
时间NOW, TODAY, TIMEDIFF, TIMETRUNCATE, TO_CHAR, TO_TIMESTAMP
数学ABS, ROUND, FLOOR, CEIL, POW, LOG, SIN, COS
类型CAST, TO_JSON
位运算& | ^ ~ << >>

详细解析

1. 聚合函数

-- 计数COUNT(*)-- 行数COUNT(col)-- 非空行数COUNT(DISTINCTcol)-- 去重计数-- 求和与均值SUM(col)AVG(col)-- 极值MIN(col)MAX(col)-- 时序首尾FIRST(col)-- 时间最早LAST(col)-- 时间最晚LAST_ROW(col)-- 最新整行

2. 统计函数

-- 标准差/方差STDDEV(col)VAR_POP(col)-- 百分位PERCENTILE(col,50)-- 精确(慢)APERCENTILE(col,50)-- 近似(快,推荐)APERCENTILE(col,99,'t-digest')-- 指定算法-- 直方图HISTOGRAM(col,'linear_bin','{"start":0,"width":10,"count":10}',0)-- 协方差HYPERLOGLOG(col)-- 近似去重计数(HLL)

3. 时序专用函数

-- DIFF: 相邻值差SELECTts,current,DIFF(current)FROMd001;-- ts=T2 时 DIFF = current(T2) - current(T1)-- DERIVATIVE: 导数SELECTts,DERIVATIVE(current,1s,0)FROMd001;-- (current_change) / time_change,每秒变化率-- MAVG: 移动平均SELECTts,MAVG(current,5)FROMd001;-- 5 个数据点的滑动平均-- TWA: 时间加权平均SELECTTWA(current)FROMd001WHEREts>now-1h;-- 适合采样间隔不均的数据-- INTERP: 插值SELECTINTERP(current)FROMd001WHEREtsBETWEEN'2026-06-04 12:00'AND'2026-06-04 13:00'EVERY(1m)FILL(LINEAR);-- 按指定时间生成插值结果-- IRATE: 瞬时变化率(基于最后两个数据点)SELECTIRATE(counter)FROMd001;-- STATECOUNT: 满足状态的连续点数SELECTSTATECOUNT(current,'gt',100)FROMd001;-- STATEDURATION: 满足状态的持续时长SELECTSTATEDURATION(current,'gt',100,1s)FROMd001;

4. 选择函数

-- TOP/BOTTOMSELECTTOP(current,10)FROMmeters;SELECTBOTTOM(current,5)FROMmeters;-- 采样SELECTSAMPLE(current,100)FROMmeters;-- 尾部SELECTTAIL(current,10)FROMmeters;-- 唯一值SELECTUNIQUE(location)FROMmeters;

5. 时间函数

-- 当前时间NOW-- 当前时间戳NOW()+1h TODAY()-- 今天 00:00-- 时间格式化TO_CHAR(ts,'yyyy-mm-dd HH:MI:SS')-- 字符串转时间TO_TIMESTAMP('2026-06-04 12:00:00','yyyy-mm-dd HH:MI:SS')-- 时间差TIMEDIFF(ts1,ts2,1m)-- 单位:1s/1m/1h/1d-- 时间截断TIMETRUNCATE(ts,1h)-- 截断到小时-- 时区TIMEZONE()-- 当前时间戳CURRENT_TIMESTAMP-- 时间加减ts+1h,ts-30m

6. 字符串函数

CONCAT('Hello',' ','World')CONCAT_WS('-','a','b','c')SUBSTR(str,1,5)LENGTH(str)-- 字符串字节长CHAR_LENGTH(str)-- 字符数UPPER(str)LOWER(str)TRIM(str)LTRIM(str),RTRIM(str)REPLACE(str,'old','new')LOCATE('sub',str)-- 子串位置

7. 数学函数

ABS(x)ROUND(x,n)-- 四舍五入FLOOR(x),CEIL(x)POW(x,y),POWER(x,y)LOG(x),LOG10(x)SQRT(x)SIN(x),COS(x),TAN(x)ASIN(x),ACOS(x),ATAN(x)PI()RAND()MOD(x,y)

8. 类型转换与条件

-- 类型转换CAST(colASINT)CAST(colASVARCHAR(20))CAST(tsASBIGINT)-- 时间戳转毫秒-- 条件函数CASEWHENcondTHENv1ELSEv2ENDCOALESCE(c1,c2,c3)-- 第一个非 NULLNULLIF(c1,c2)-- 相等返回 NULL-- JSONTO_JSON('{"a":1}')-- 文本转 JSONcol->'$.field'-- JSON 字段提取(视版本)

9. 窗口元数据函数

SELECT_wstart,-- 窗口开始_wend,-- 窗口结束_wduration,-- 窗口时长(毫秒)_qstart,-- 查询开始_qend,-- 查询结束AVG(current)FROMmetersWHEREts>now-1dINTERVAL(1h);

代码示例

综合时序分析

-- 设备性能分析SELECTtbname,_wstart,AVG(current)ASavg_c,STDDEV(current)ASstd_c,APERCENTILE(current,95)ASp95,MAX(current)-MIN(current)ASrange_c,STATECOUNT(current,'gt',100)ASover_count,DERIVATIVE(SUM(current),1h,0)AShourly_growthFROMmetersWHEREts>now-1dPARTITIONBYtbnameINTERVAL(1h);

数据补全与插值

-- 5 分钟均匀插值SELECTINTERP(current)AScurrentFROMd001WHEREtsBETWEEN'2026-06-04'AND'2026-06-05'EVERY(5m)FILL(LINEAR);

字符串与时间处理

-- 按天分组统计SELECTTO_CHAR(ts,'yyyy-mm-dd')ASday,AVG(current)FROMmetersWHEREts>now-30dGROUPBYday;-- 转大写匹配SELECT*FROMmetersWHEREUPPER(location)='BEIJING';

性能考量

函数性能等级

函数性能备注
COUNT/SUM/AVG/MIN/MAX极快用块 SMA
FIRST/LAST极快用 LAST 缓存
APERCENTILE近似算法
PERCENTILE精确,扫全部
DIFF/DERIVATIVE行间计算
MAVG窗口聚合
TWA复杂时间加权
INTERP插值计算

选择建议

需求推荐
计数COUNT
去重计数COUNT(DISTINCT)(小数据)/ HYPERLOGLOG(大数据)
百分位APERCENTILE(一般)/ PERCENTILE(必须精确)
移动均值MAVG
不均匀采样均值TWA
等距插值INTERP

FAQ

Q1: 自定义函数 (UDF) 怎么用?

支持 C/C++ UDF。需编译为 so,CREATE FUNCTION 注册:

CREATEAGGREGATEFUNCTIONfn_nameAS'/path/to/lib.so'OUTPUTTYPEDOUBLE;

Q2: COUNT(*) 和 COUNT(col) 区别?

  • COUNT(*): 所有行
  • COUNT(col): col 非 NULL 的行
  • 性能:COUNT(*) 用块 SMA 最快

Q3: PERCENTILE 卡死?

精确计算需排序所有数据。大数据用 APERCENTILE。

Q4: DIFF 第一行是什么?

NULL(无前一行可比)。

Q5: 函数嵌套支持吗?

支持但有限。聚合函数不能嵌套聚合函数(除非通过子查询)。

参考

系统构架篇

  • 01-《TDengine 整体架构全景》
  • 02-《集群拓扑深度解析》
  • 03-《MNode 内部机制深度解析》
  • 04-《RPC 通信层深度解析》
  • 05-《VNode 生命周期》
  • 06-《RAFT 共识协议》
  • 07-《端到端的消息流》

数据模型

  • 01-《数据库创建与参数详解》
  • 02-《超级表/子表/普通表》
  • 03-《支持数据类型深度解析》
  • 04-《TDengine Tag 设计哲学与 Schema 变更机制》
  • 05-《TDengine 虚拟表实现原理》

存储引擎

  • 01-《TDengine 存储引擎概览》
  • 02-《TDengine MemTable 深度解析》
  • 03-《TDengine WAL 预写日志机制》
  • 04-《TDengine 数据文件格式》
  • 05-《TDengine Commit 与 Flush 机制 》
  • 06-《TDengine Compaction 合并策略 》
  • 07-《TDengine 数据保留与 TTL》
  • 08-《TDengine 压缩编码机制》
  • 09-《TDengine Cache 与 Last 查询加速》
  • 10-《TDengine 逻辑计划生成》

查询引擎

  • 01-《TDengine 查询引擎概览》
  • 02-《TDengine SQL 解析与词法分析》
  • 03-《TDengine 语义分析与 AST 重写》
  • 04-《TDengine 逻辑计划生成》
  • 05-《TDengine 物理计划生成》
  • 06-《TDengine 扫描算子》
  • 07-《TDengine 聚合算子》
  • 08-《TDengine 聚合算子》
  • 09-《TDengine 连接算子》
  • 10-《TDengine 排序、填充与投影》
  • 11-《TDengine 分布式查询执行》
  • 12-《TDengine EXPLAIN 与查询优化》

数据写入

  • 01-《TDengine SQL INSERT》
  • 02-《TDengine 无模式写入》
  • 03-《TDengine STMT 写入》
  • 04-《TDengine 写入内部流程》
  • 05-《TDengine 数据更新删除》

数据订阅

  • 01-《TDengine 数据订阅》
  • 02-《TDengine 订阅 vs Kafka》
  • 03-《TDengine TMQ 消费流程》
  • 04-《TDengine 内部机制》
  • 05-《TDengine TMQ 最佳实践》

预聚合

  • 01-《TDengine RSMA》
  • 02-《TDengine TSMA — 时间维度的物化聚合视图》
  • 03-《TDengine SMA 内部实现》

索引

  • 01-《TDengine Tag 索引》
  • 02-《TDengine SMA 索引》

SQL 语句

  • 01-《TDengine DDL》
  • 02-《TDengine DML SELECT》

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询