
TAN 函数
语法
sql
TAN(expr)
功能说明
获得指定字段的正切值。
版本
v3.0.0.0
返回结果类型
DOUBLE
适用数据类型
数值类型。
嵌套子查询支持
适用于内层查询和外层查询。
适用于
表和超级表。
使用说明
- 如果
expr为 NULL,返回 NULL。 - 输入参数按弧度制计算。
- 只能与普通列、TAG 列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
- 若要将角度转换为弧度,可使用 RADIANS 函数,例如:
TAN(RADIANS(45))。
示例所用表与数据(可直接复制执行)
sql
-- 建库与使用
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: 常量正切计算
sql
-- 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: 角度转弧度计算
sql
-- 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 值处理
sql
taos> SELECT TAN(NULL);
tan(null) |
========================
NULL |
示例 4: 负角度计算
sql
-- 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: 列数据正切计算
sql
-- 计算相位角的正切值
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: 功率因数角正切值计算
目的:计算功率因数角的正切值,用于分析无功功率与有功功率的比值关系。
sql
-- tan(φ) = Q/P,其中 Q 为无功功率,P 为有功功率
SELECT ts,
phase,
TAN(RADIANS(phase)) AS power_factor_tan,
CASE
WHEN ABS(TAN(RADIANS(phase))) > 0.75 THEN '需要补偿'
ELSE '正常'
END AS compensation_status
FROM d1001
ORDER BY ts;
应用价值:
- 快速评估无功功率占比
- 识别需要无功补偿的时段
- 优化功率因数
示例 7: 阻抗角分析
目的:通过相位角的正切值分析电路的阻抗特性。
sql
-- 计算阻抗角的正切值(电抗与电阻的比值)
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: 相位角变化率检测
目的:检测相位角正切值的变化,识别负载突变。
sql
-- 检测相位角正切值的突变
SELECT ts,
phase,
TAN(RADIANS(phase)) AS phase_tan,
DIFF(TAN(RADIANS(phase))) AS phase_tan_change
FROM d1001
ORDER BY ts;
应用价值:
- 检测负载突变
- 识别设备启停事件
- 预警异常运行状态
示例 9: 三相不平衡分析(正切分量)
目的:利用正切函数分析三相电路的不平衡程度。
sql
-- 计算相位角正切值的标准差评估三相不平衡
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: 功率三角形计算
目的:利用正切值计算无功功率,构建功率三角形。
sql
-- 计算有功功率、视在功率和无功功率
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: 相位角异常检测
目的:检测相位角正切值超出正常范围的情况。
sql
-- 检测相位角正切值异常(过大或过小)
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)实时监测无功功率占比,自动调整补偿设备。
示例:
sql
-- 实时监测无功功率占比
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,
CASE
WHEN 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: 负载特性分析
目的:通过正切值分析负载的感性或容性特征。
示例:
sql
-- 分析负载特性
SELECT _wstart AS time_window,
AVG(TAN(RADIANS(phase))) AS avg_tan_phi,
CASE
WHEN 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: 电能质量评估
目的:通过相位角正切值的稳定性评估电能质量。
示例:
sql
-- 评估相位角稳定性
SELECT location,
STDDEV(TAN(RADIANS(phase))) AS tan_phi_stddev,
STDDEV(TAN(RADIANS(phase))) / ABS(AVG(TAN(RADIANS(phase)))) * 100 AS variation_coefficient,
CASE
WHEN 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 提供实时分析、可视化、事件管理与报警等功能。