
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 提供实时分析、可视化、事件管理与报警等功能。