TDengine 数学函数 ABS() 用户手册

ABS 用户手册

sql 复制代码
ABS(expr)

功能说明

获得指定字段的绝对值。

返回结果类型

与指定字段的原始数据类型一致。

适用数据类型

数值类型。

嵌套子查询支持

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

适用于

表和超级表。

使用说明

  • 只能与普通列,选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。
  • 如果 expr 为 NULL,返回 NULL。
  • 支持所有数值类型:TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、UTINYINT、USMALLINT、UINT、UBIGINT。
  • 返回值类型与输入参数类型保持一致。

使用示例

示例 1: 基本用法

sql 复制代码
taos> SELECT ABS(-10);
     abs(-10)      |
====================
                10 |

taos> SELECT ABS(10);
      abs(10)      |
====================
                10 |

示例 2: 查询电表电流的绝对值

sql 复制代码
-- 查询单个电表的电流绝对值
taos> SELECT ts, current, ABS(current) FROM meters WHERE tbname='d1001' LIMIT 5;
           ts            |  current  | abs(current) |
=======================================================
 2018-10-03 14:38:05.000 |  10.30000 |   10.30000   |
 2018-10-03 14:38:15.000 | -12.60000 |   12.60000   |
 2018-10-03 14:38:16.000 |  11.80000 |   11.80000   |

-- 查询所有电表的电流绝对值
taos> SELECT tbname, ts, ABS(current) FROM meters LIMIT 10;

示例 3: 计算电压偏差的绝对值

sql 复制代码
-- 假设标准电压为220V,计算电压偏差的绝对值
taos> SELECT tbname, ts, voltage, ABS(voltage - 220) AS voltage_deviation 
      FROM meters 
      WHERE ts >= '2018-10-03 14:38:00' 
      LIMIT 10;

           tbname           |           ts            |  voltage  | voltage_deviation |
========================================================================================
 d1001                      | 2018-10-03 14:38:05.000 |       219 |                 1 |
 d1001                      | 2018-10-03 14:38:15.000 |       221 |                 1 |

示例 4: 在 WHERE 子句中使用

sql 复制代码
-- 查询电流绝对值大于10A的记录
taos> SELECT * FROM meters WHERE ABS(current) > 10;

-- 查询电压偏差绝对值超过5V的异常数据
taos> SELECT tbname, ts, voltage 
      FROM meters 
      WHERE ABS(voltage - 220) > 5;

示例 5: 与其他函数组合使用

sql 复制代码
-- 计算功率的绝对值(电压×电流)
taos> SELECT tbname, ts, ABS(voltage * current) AS abs_power 
      FROM meters 
      LIMIT 5;

-- 计算温度变化的绝对值
taos> SELECT tbname, 
             ABS(temperature - LAG(temperature, 1)) AS temp_change 
      FROM meters 
      WHERE tbname='d1001';

示例 6: 按地区统计电流绝对值的平均值

sql 复制代码
-- 无法直接使用 ABS(AVG(current)),需要先计算再聚合
taos> SELECT location, AVG(abs_current) 
      FROM (SELECT location, ABS(current) AS abs_current FROM meters)
      GROUP BY location;

          location          |    avg(abs_current)     |
=========================================================
 California.Campbell        |         10.523000000000 |
 California.LosAngles       |         11.234000000000 |

示例 7: 聚合后取绝对值

sql 复制代码
taos> select abs(sum(current)) from meters;
     abs(sum(current))     |
============================
          6883.07116031647 |
Query OK, 1 row(s) in set (0.009217s)

注意事项

  • 对于有符号整数类型,如果输入值为该类型的最小值(如 TINYINT 的 -128),其绝对值可能会超出类型范围。
  • 对于无符号整数类型,ABS 函数的效果等同于返回原值。
  • 在处理电流、电压等可能为负值的物理量时,使用 ABS 函数可以统一计算幅值。
  • 浮点数的绝对值计算遵循 IEEE 754 标准。

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

相关推荐
TM1Club4 分钟前
AI驱动的预测:新的竞争优势
大数据·人工智能·经验分享·金融·数据分析·自动化
zhang133830890757 分钟前
CG-09H 超声波风速风向传感器 加热型 ABS材质 重量轻 没有机械部件
大数据·运维·网络·人工智能·自动化
sjjhd65213 分钟前
Python日志记录(Logging)最佳实践
jvm·数据库·python
Configure-Handler18 分钟前
buildroot System configuration
java·服务器·数据库
2301_8213696140 分钟前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
电商API_180079052471 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
2401_832131952 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
龙山云仓2 小时前
No140:AI世间故事-对话康德——先验哲学与AI理性:范畴、道德律与自主性
大数据·人工智能·深度学习·机器学习·全文检索·lucene
打工的小王2 小时前
redis(四)搭建哨兵模式:一主二从三哨兵
数据库·redis·缓存
Anarkh_Lee3 小时前
【小白也能实现智能问数智能体】使用开源的universal-db-mcp在coze中实现问数 AskDB智能体
数据库·人工智能·ai·开源·ai编程