TDengine 数学函数 DEGRESS 用户手册

DEGREES

sql 复制代码
DEGREES(expr)

功能说明

将弧度值转换为角度值。

版本

v3.3.3.0

返回结果类型

DOUBLE。

适用数据类型

数值类型(TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE 及其无符号类型)。

嵌套子查询支持

适用于内层查询和外层查询。

适用于

表和超级表。

使用说明

  • expr 为 NULL,返回 NULL。
  • 转换公式:degree = radian × 180 / π。
  • 只能与普通列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
  • 支持与其他数学函数组合使用。

使用示例

假设有以下智能电表表结构:

sql 复制代码
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: 常量计算

sql 复制代码
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: 负数转换

sql 复制代码
taos> SELECT DEGREES(-1);
      degrees(-1)        |
==========================
     -57.295779513082321 |

taos> SELECT DEGREES(-1.5);
     degrees(-1.5)       |
==========================
     -85.943669269623481 |

示例 3: NULL 值处理

sql 复制代码
taos> SELECT DEGREES(NULL);
      degrees(null)      |
==========================
 NULL                    |
智能电表场景示例

示例 4: 转换相位弧度为角度

sql 复制代码
-- 插入测试数据,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: 与三角函数组合使用

sql 复制代码
-- 计算电流对应角度的正弦值的反函数角度
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: 算术运算

sql 复制代码
-- 角度加法
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: 与其他数学函数嵌套

sql 复制代码
-- 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)

sql 复制代码
-- 验证 DEGREES 和 RADIANS 互为反函数
taos> SELECT DEGREES(RADIANS(90));
 degrees(radians(90)) |
=======================
      90.000000000000 |

taos> SELECT DEGREES(ATAN(1));
 degrees(atan(1))  |
====================
      45.000000000 |

示例 9: 在表查询中使用

sql 复制代码
-- 从表中读取并转换
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: 大数值转换

sql 复制代码
taos> SELECT DEGREES(1000000);
     degrees(1000000)      |
============================
      57295779.513082321286 |

实际生产场景应用

场景 1: 电力系统 - 相位角监测

sql 复制代码
-- 将相位从弧度转换为角度,便于工程人员理解
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: 三相电分析 - 角度计算

sql 复制代码
-- 计算三相电的相位角差(假设有三个相位字段)
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: 设备健康监测 - 角度趋势分析

sql 复制代码
-- 统计每小时平均相位角度
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: 数据可视化 - 角度归一化

sql 复制代码
-- 将弧度值归一化为 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 提供实时分析、可视化、事件管理与报警等功能。

相关推荐
TDengine (老段)3 小时前
TDengine 数学函数 GREATEST 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
安当加密4 小时前
云原生时代的数据库字段加密:在微服务与 Kubernetes 中实现合规与敏捷的统一
数据库·微服务·云原生
爱喝白开水a4 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
想ai抽4 小时前
深入starrocks-多列联合统计一致性探查与策略(YY一下)
java·数据库·数据仓库
武子康4 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
longgyy4 小时前
5 分钟用火山引擎 DeepSeek 调用大模型生成小红书文案
java·数据库·火山引擎
字节数据平台5 小时前
火山引擎Data Agent再拓新场景,重磅推出用户研究Agent
大数据·人工智能·火山引擎
ytttr8735 小时前
C# 仿QQ聊天功能实现 (SQL Server数据库)
数据库·oracle·c#
小莞尔6 小时前
【51单片机】【protues仿真】基于51单片机主从串行通信系统
c语言·单片机·嵌入式硬件·物联网·51单片机