TDengine 数据函数 TAN 用户手册

TAN 函数
语法
TAN(expr)
功能说明
获得指定字段的正切值。
版本
v3.0.0.0
返回结果类型
DOUBLE
适用数据类型
数值类型。
嵌套子查询支持
适用于内层查询和外层查询。
适用于
表和超级表。
使用说明
- 如果 expr为 NULL,返回 NULL。
- 输入参数按弧度制计算。
- 只能与普通列、TAG 列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
- 若要将角度转换为弧度,可使用 RADIANS 函数,例如:TAN(RADIANS(45))。
示例所用表与数据(可直接复制执行)
-- 建库与使用
CREATE DATABASE IF NOT EXISTS power;
USE power;-- 智能电表表结构(带相位信息)
CREATE STABLE meters (ts TIMESTAMP,current FLOAT,voltage INT,phase FLOAT,power DOUBLE
) TAGS (groupid INT,location VARCHAR(64)
);-- 子表
CREATE TABLE d1001 USING meters TAGS (1, 'California.SanFrancisco');
CREATE TABLE d1002 USING meters TAGS (2, 'California.LosAngeles');-- 写入数据(phase 列存储相位角度,单位:度)
INSERT INTO d1001 VALUES('2024-01-01 10:00:00.000', 10.3, 220, 0.0, 2266.0),('2024-01-01 10:01:00.000', 12.6, 221, 30.0, 2784.6),('2024-01-01 10:02:00.000',  8.5, 223, 45.0, 1895.5),('2024-01-01 10:03:00.000', 11.2, 222, 60.0, 2486.4);INSERT INTO d1002 VALUES('2024-01-01 10:00:00.000',  9.0, 219, 0.0, 1971.0),('2024-01-01 10:01:00.000', 14.0, 222, 90.0, 3108.0),('2024-01-01 10:02:00.000',  7.2, 220, 120.0, 1584.0),('2024-01-01 10:03:00.000', 10.5, 221, -30.0, 2320.5);
基础示例
示例 1: 常量正切计算
-- tan(0) = 0
taos> SELECT TAN(0);tan(0)           |
============================0.000000000000000 |-- tan(π/4) = 1
taos> SELECT TAN(PI()/4);tan(pi()/4)        |
============================1.000000000000000 |-- tan(π/3) ≈ 1.732
taos> SELECT TAN(PI()/3);tan(pi()/3)        |
============================1.732050807568877 |-- tan(π/6) ≈ 0.577
taos> SELECT TAN(PI()/6);tan(pi()/6)        |
============================0.577350269189626 |
示例 2: 角度转弧度计算
-- tan(30°) ≈ 0.577
taos> SELECT TAN(RADIANS(30));tan(radians(30))       |
============================0.577350269189626 |-- tan(45°) = 1
taos> SELECT TAN(RADIANS(45));tan(radians(45))       |
============================1.000000000000000 |-- tan(60°) ≈ 1.732
taos> SELECT TAN(RADIANS(60));tan(radians(60))       |
============================1.732050807568877 |
示例 3: NULL 值处理
taos> SELECT TAN(NULL);tan(null)       |
========================NULL                  |
示例 4: 负角度计算
-- tan(-30°) ≈ -0.577
taos> SELECT TAN(RADIANS(-30));tan(radians(-30))       |
============================-0.577350269189626 |-- tan(-45°) = -1
taos> SELECT TAN(RADIANS(-45));tan(radians(-45))       |
============================-1.000000000000000 |
示例 5: 列数据正切计算
-- 计算相位角的正切值
SELECT ts,phase,TAN(RADIANS(phase)) AS phase_tan
FROM d1001
ORDER BY ts;
           ts            |  phase  |     phase_tan        |
====================================================================2024-01-01 10:00:00.000 |     0.0 |    0.000000000000000 |2024-01-01 10:01:00.000 |    30.0 |    0.577350269189626 |2024-01-01 10:02:00.000 |    45.0 |    1.000000000000000 |2024-01-01 10:03:00.000 |    60.0 |    1.732050807568877 |
智能电表场景示例
示例 6: 功率因数角正切值计算
目的:计算功率因数角的正切值,用于分析无功功率与有功功率的比值关系。
-- tan(φ) = Q/P,其中 Q 为无功功率,P 为有功功率
SELECT ts,phase,TAN(RADIANS(phase)) AS power_factor_tan,CASEWHEN ABS(TAN(RADIANS(phase))) > 0.75 THEN '需要补偿'ELSE '正常'END AS compensation_status
FROM d1001
ORDER BY ts;
应用价值:
- 快速评估无功功率占比
- 识别需要无功补偿的时段
- 优化功率因数
示例 7: 阻抗角分析
目的:通过相位角的正切值分析电路的阻抗特性。
-- 计算阻抗角的正切值(电抗与电阻的比值)
SELECT location,AVG(TAN(RADIANS(phase))) AS avg_impedance_tan,STDDEV(TAN(RADIANS(phase))) AS impedance_tan_stddev
FROM meters
WHERE ts >= '2024-01-01 10:00:00'AND ts < '2024-01-01 10:04:00'
GROUP BY location;
应用价值:
- 分析电路阻抗特性
- 识别感性负载或容性负载
- 优化电路设计
示例 8: 相位角变化率检测
目的:检测相位角正切值的变化,识别负载突变。
-- 检测相位角正切值的突变
SELECT ts,phase,TAN(RADIANS(phase)) AS phase_tan,DIFF(TAN(RADIANS(phase))) AS phase_tan_change
FROM d1001
ORDER BY ts;
应用价值:
- 检测负载突变
- 识别设备启停事件
- 预警异常运行状态
示例 9: 三相不平衡分析(正切分量)
目的:利用正切函数分析三相电路的不平衡程度。
-- 计算相位角正切值的标准差评估三相不平衡
SELECT _wstart AS time_window,AVG(TAN(RADIANS(phase))) AS avg_phase_tan,STDDEV(TAN(RADIANS(phase))) AS phase_tan_stddev
FROM meters
WHERE ts >= '2024-01-01 10:00:00'AND ts < '2024-01-01 11:00:00'
INTERVAL(10m);
应用价值:
- 量化三相不平衡程度
- 评估中性线电流
- 指导负载调整
示例 10: 功率三角形计算
目的:利用正切值计算无功功率,构建功率三角形。
-- 计算有功功率、视在功率和无功功率
SELECT ts,power AS active_power,voltage * current AS apparent_power,power * TAN(RADIANS(phase)) AS reactive_power,TAN(RADIANS(phase)) AS tan_phi
FROM d1001
ORDER BY ts;
应用价值:
- 完整分析功率关系
- 计算无功功率需求
- 指导补偿设备配置
示例 11: 相位角异常检测
目的:检测相位角正切值超出正常范围的情况。
-- 检测相位角正切值异常(过大或过小)
SELECT ts,phase,TAN(RADIANS(phase)) AS phase_tan
FROM meters
WHERE ABS(TAN(RADIANS(phase))) > 2.0  -- 相位角接近±63.43°以上OR phase > 80
ORDER BY ts;
应用价值:
- 识别功率因数过低
- 检测设备异常运行
- 触发告警机制
生产场景应用与目的
场景 A: 无功功率监测与补偿
目的:通过相位角的正切值(tan(φ) = Q/P)实时监测无功功率占比,自动调整补偿设备。
示例:
-- 实时监测无功功率占比
SELECT location,AVG(power) AS avg_active_power,AVG(power * TAN(RADIANS(phase))) AS avg_reactive_power,AVG(TAN(RADIANS(phase))) AS avg_tan_phi,CASEWHEN AVG(TAN(RADIANS(phase))) > 0.75 THEN '急需补偿'WHEN AVG(TAN(RADIANS(phase))) > 0.48 THEN '建议补偿'ELSE '正常'END AS compensation_level
FROM meters
WHERE ts >= NOW - 15m
GROUP BY location;
场景 B: 负载特性分析
目的:通过正切值分析负载的感性或容性特征。
示例:
-- 分析负载特性
SELECT _wstart AS time_window,AVG(TAN(RADIANS(phase))) AS avg_tan_phi,CASEWHEN AVG(TAN(RADIANS(phase))) > 0.1 THEN '感性负载'WHEN AVG(TAN(RADIANS(phase))) < -0.1 THEN '容性负载'ELSE '纯阻性负载'END AS load_type
FROM meters
WHERE ts >= '2024-01-01 00:00:00'AND ts < '2024-01-02 00:00:00'
INTERVAL(1h);
场景 C: 电能质量评估
目的:通过相位角正切值的稳定性评估电能质量。
示例:
-- 评估相位角稳定性
SELECT location,STDDEV(TAN(RADIANS(phase))) AS tan_phi_stddev,STDDEV(TAN(RADIANS(phase))) / ABS(AVG(TAN(RADIANS(phase)))) * 100 AS variation_coefficient,CASEWHEN STDDEV(TAN(RADIANS(phase))) > 0.5 THEN '不稳定'ELSE '稳定'END AS stability_status
FROM meters
WHERE ts >= NOW - 1d
GROUP BY location;
注意事项
-  输入单位:TAN 函数的输入参数必须是弧度制,如果输入是角度,需使用 RADIANS 函数转换。 
-  奇点问题:当角度为 ±90°(±π/2 弧度)时,正切值趋向于无穷大,实际计算结果可能非常大。 
-  精度问题:浮点运算存在精度限制,对于需要高精度的应用需要注意。 
-  周期性:正切函数是周期函数,周期为 π,即 TAN(x) = TAN(x + πn),其中 n 为整数。
-  NULL 传播:输入为 NULL 时返回 NULL。 
-  性能考虑:TAN 是逐行计算的标量函数,在大数据集上建议配合时间过滤和列裁剪。 
数学关系
- 基本定义:对于直角三角形,tan(θ) = 对边 / 邻边 = sin(θ) / cos(θ)
- 周期性:TAN(x + π) = TAN(x)
- 奇函数性质:TAN(-x) = -TAN(x)
- 与其他三角函数关系: - TAN(x) = SIN(x) / COS(x)
- 1 + TAN²(x) = 1 / COS²(x) = SEC²(x)
 
- 和差公式: - TAN(x + y) = (TAN(x) + TAN(y)) / (1 - TAN(x)TAN(y))
- TAN(x - y) = (TAN(x) - TAN(y)) / (1 + TAN(x)TAN(y))
 
- 倍角公式:TAN(2x) = 2TAN(x) / (1 - TAN²(x))
- 特殊值: - TAN(0) = 0
- TAN(π/6) ≈ 0.577
- TAN(π/4) = 1
- TAN(π/3) ≈ 1.732
- TAN(π/2) → ∞(无穷大)
 
相关函数
- SIN:正弦函数,TAN(x) = SIN(x) / COS(x)
- COS:余弦函数,TAN(x) = SIN(x) / COS(x)
- ATAN:反正切函数,TAN 的反函数
- RADIANS:角度转弧度,常与 TAN 配合使用
- PI:返回圆周率 π
函数意义与实际应用价值
数学意义
TAN 函数是三角函数中的基本函数之一,表示角度与直角三角形两边比例的关系。在电力系统中,tan(φ) 直接反映了无功功率与有功功率的比值,是功率分析的重要指标。
实际应用价值
-  功率分析 - 直接计算无功功率(Q = P × tan(φ))
- 快速评估功率因数
- 指导无功补偿
 
-  负载特性识别 - 判断感性或容性负载
- 分析负载阻抗特性
- 优化负载配置
 
-  电能质量监测 - 评估相位稳定性
- 检测功率因数异常
- 预警设备故障
 
-  补偿设备控制 - 实时计算补偿需求
- 自动调整补偿容量
- 优化补偿效果
 
-  能效管理 - 分析无功损耗
- 优化运行策略
- 降低电费成本
 
关于 TDengine
TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。
