分类: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-30m6. 字符串函数
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 提供实时分析、可视化、事件管理与报警等功能。