TDengine 数学函数 DEGRESS 用户手册
DEGREES
DEGREES(expr)
功能说明
将弧度值转换为角度值。
版本
v3.3.3.0
返回结果类型
DOUBLE。
适用数据类型
数值类型(TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE 及其无符号类型)。
嵌套子查询支持
适用于内层查询和外层查询。
适用于
表和超级表。
使用说明
- 若
expr
为 NULL,返回 NULL。 - 转换公式:degree = radian × 180 / π。
- 只能与普通列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
- 支持与其他数学函数组合使用。
使用示例
假设有以下智能电表表结构:
CREATE DATABASE power;
USE power;CREATE STABLE meters (ts TIMESTAMP,current FLOAT,voltage INT,phase FLOAT
) TAGS (location VARCHAR(64),groupId INT
);CREATE TABLE d1001 USING meters TAGS ('California.SanFrancisco', 1);
基础示例
示例 1: 常量计算
taos> SELECT DEGREES(0);degrees(0) |
==========================0.000000000000000 |taos> SELECT DEGREES(1);degrees(1) |
==========================57.295779513082321 |taos> SELECT DEGREES(1.5);degrees(1.5) |
==========================85.943669269623481 |taos> SELECT DEGREES(PI());degrees(pi()) |
============================180.000000000000000 |
示例 2: 负数转换
taos> SELECT DEGREES(-1);degrees(-1) |
==========================-57.295779513082321 |taos> SELECT DEGREES(-1.5);degrees(-1.5) |
==========================-85.943669269623481 |
示例 3: NULL 值处理
taos> SELECT DEGREES(NULL);degrees(null) |
==========================NULL |
智能电表场景示例
示例 4: 转换相位弧度为角度
-- 插入测试数据,phase 字段存储弧度值
INSERT INTO d1001 VALUES ('2018-10-03 14:38:05.000', 10.3, 220, 0.523599),('2018-10-03 14:38:15.000', 12.6, 220, 0.785398),('2018-10-03 14:38:16.800', 11.8, 221, 1.047198);-- 将相位从弧度转换为角度
taos> SELECT ts, phase, DEGREES(phase) AS phase_degree FROM d1001;ts | phase | phase_degree |
==========================================================2018-10-03 14:38:05 | 0.523599 | 30.000057296 |2018-10-03 14:38:15 | 0.785398 | 45.000011459 |2018-10-03 14:38:16 | 1.047198 | 60.000057296 |
示例 5: 与三角函数组合使用
-- 计算电流对应角度的正弦值的反函数角度
taos> SELECT DEGREES(ASIN(current/100)) FROM d1001 WHERE ABS(current) <= 100;-- 计算 sin 值再转换为角度
taos> SELECT current, SIN(current) AS sin_val,DEGREES(SIN(current)) AS sin_degrees FROM d1001 LIMIT 3;
示例 6: 算术运算
-- 角度加法
taos> SELECT DEGREES(1) + 1;degrees(1) + 1 |
==================58.295779513082 |-- 角度减法
taos> SELECT DEGREES(1) - 1;degrees(1) - 1 |
==================56.295779513082 |-- 角度乘法
taos> SELECT DEGREES(1) * 2;degrees(1) * 2 |
===================114.591559026165 |-- 角度除法
taos> SELECT DEGREES(1) / 2;degrees(1) / 2 |
==================28.647889756541 |
示例 7: 与其他数学函数嵌套
-- ABS + DEGREES
taos> SELECT DEGREES(ABS(-10));degrees(abs(-10)) |
============================572.957795130823210 |-- DEGREES + POW
taos> SELECT POW(DEGREES(10), 2);pow(degrees(10), 2) |
============================328231.636532807860 |-- DEGREES + SQRT
taos> SELECT SQRT(DEGREES(10));sqrt(degrees(10)) |
============================23.949533969863897 |-- DEGREES + CAST
taos> SELECT CAST(DEGREES(10) AS INT);cast(degrees(10) as int) |
===========================572 |
示例 8: 反向验证(RADIANS)
-- 验证 DEGREES 和 RADIANS 互为反函数
taos> SELECT DEGREES(RADIANS(90));degrees(radians(90)) |
=======================90.000000000000 |taos> SELECT DEGREES(ATAN(1));degrees(atan(1)) |
====================45.000000000 |
示例 9: 在表查询中使用
-- 从表中读取并转换
taos> SELECT DEGREES(phase) FROM d1001 ORDER BY ts LIMIT 10;-- 与聚合函数分开使用
taos> SELECT ts, DEGREES(phase) FROM (SELECT ts, phase FROM d1001) ORDER BY ts;
示例 10: 大数值转换
taos> SELECT DEGREES(1000000);degrees(1000000) |
============================57295779.513082321286 |
实际生产场景应用
场景 1: 电力系统 - 相位角监测
-- 将相位从弧度转换为角度,便于工程人员理解
SELECT tbname,ts,phase AS phase_radian, DEGREES(phase) AS phase_degree, CASE WHEN DEGREES(phase) < 30 THEN '相位正常' WHEN DEGREES(phase) < 60 THEN '相位偏移' ELSE '相位严重偏移' END AS status
FROM meters
WHERE ts >= NOW - 1h
ORDER BY ts DESC;
场景 2: 三相电分析 - 角度计算
-- 计算三相电的相位角差(假设有三个相位字段)
SELECT ts,location,DEGREES(phase1) AS phase1_deg,DEGREES(phase2) AS phase2_deg,DEGREES(phase3) AS phase3_deg,ABS(DEGREES(phase1) - DEGREES(phase2)) AS phase_diff_12,ABS(DEGREES(phase2) - DEGREES(phase3)) AS phase_diff_23
FROM meters
WHERE ts >= NOW - 1d;
场景 3: 设备健康监测 - 角度趋势分析
-- 统计每小时平均相位角度
SELECT _wstart AS time_window,AVG(DEGREES(phase)) AS avg_phase_degree,MAX(DEGREES(phase)) AS max_phase_degree,MIN(DEGREES(phase)) AS min_phase_degree,STDDEV(DEGREES(phase)) AS phase_stddev
FROM meters
WHERE ts >= NOW - 7d
INTERVAL(1h);
场景 4: 数据可视化 - 角度归一化
-- 将弧度值归一化为 0-360 度范围
SELECT tbname,ts,phase,MOD(DEGREES(phase), 360) AS normalized_degree
FROM meters
WHERE ts >= NOW - 1h
ORDER BY ts;
注意事项
- 输入范围:DEGREES 函数可以接受任意实数作为输入,没有范围限制。
- 精度问题:由于浮点运算的精度限制,极大或极小的输入值可能导致精度损失。
- 性能:DEGREES 是标量函数,对每一行数据独立计算,性能开销较小。
- 不支持聚合混用:不能与聚合函数(如 SUM、AVG)直接组合使用,需使用子查询。
- 角度范围:转换后的角度值没有限制,可能超出 0-360 度范围,需要根据实际应用场景进行归一化处理。
数学关系
DEGREES(x) = x × 180 / π
DEGREES(PI()) = 180
DEGREES(2 × PI()) = 360
DEGREES(PI() / 2) = 90
DEGREES(-PI() / 2) = -90
DEGREES(RADIANS(x)) = x
(互为反函数)
相关函数
- RADIANS: 将角度转换为弧度,与 DEGREES 互为反函数
- SIN: 正弦函数,输入为弧度
- COS: 余弦函数,输入为弧度
- TAN: 正切函数,输入为弧度
- ASIN: 反正弦函数,返回弧度
- ACOS: 反余弦函数,返回弧度
- ATAN: 反正切函数,返回弧度
- PI: 返回圆周率 π
关于 TDengine
TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。