当前位置: 首页 > news >正文

TDengine 数学函数 SIGN 用户手册

在这里插入图片描述

SIGN 函数

语法

SIGN(expr)

功能说明

返回数值表达式的符号,用于判断数值的正负性。

版本

v3.3.3.0

返回结果类型

与输入字段的原始数据类型一致。

适用数据类型

数值类型。

嵌套子查询支持

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

适用于

表和超级表。

使用说明

  • 如果 expr 为负数,返回 -1。
  • 如果 expr 为正数,返回 1。
  • 如果 expr 为 0,返回 0。
  • 如果 expr 为 NULL,返回 NULL。
  • 只能与普通列、TAG 列、选择(Selection)、投影(Projection)函数一起使用,不能与聚合(Aggregation)函数一起使用。

示例所用表与数据(可直接复制执行)

-- 建库与使用
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');-- 写入数据(包含正负功率值,模拟发电和用电场景)
INSERT INTO d1001 VALUES('2024-01-01 10:00:00.000', 10.3, 220, 30.0, 2266.0),('2024-01-01 10:01:00.000', -5.2, 221, 45.0, -1149.2),('2024-01-01 10:02:00.000', 8.5, 223, 60.0, 1895.5),('2024-01-01 10:03:00.000', -3.8, 222, 120.0, -843.6),('2024-01-01 10:04:00.000', 0.0, 220, 0.0, 0.0);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', -7.5, 222, 90.0, -1665.0),('2024-01-01 10:02:00.000', 7.2, 220, 180.0, 1584.0),('2024-01-01 10:03:00.000', -4.2, 221, -30.0, -928.2),('2024-01-01 10:04:00.000', 0.0, 220, 0.0, 0.0);

基础示例

示例 1: 常量符号判断

-- 正数返回 1
taos> SELECT SIGN(10);sign(10)        |
========================1 |-- 负数返回 -1
taos> SELECT SIGN(-5);sign(-5)        |
========================-1 |-- 零返回 0
taos> SELECT SIGN(0);sign(0)        |
========================0 |-- 浮点数
taos> SELECT SIGN(-3.14);sign(-3.14)      |
========================-1 |

示例 2: NULL 值处理

taos> SELECT SIGN(NULL);sign(null)       |
========================NULL                  |

示例 3: 列数据符号判断

-- 判断电流方向(正:用电,负:发电)
SELECT ts, current, SIGN(current) AS current_direction
FROM d1001
ORDER BY ts;
           ts            |  current  | current_direction |
====================================================================2024-01-01 10:00:00.000 | 10.300000 |                 1 |2024-01-01 10:01:00.000 | -5.200000 |                -1 |2024-01-01 10:02:00.000 |  8.500000 |                 1 |2024-01-01 10:03:00.000 | -3.800000 |                -1 |2024-01-01 10:04:00.000 |  0.000000 |                 0 |

示例 4: 功率方向标识

-- 标识功率流向(1:消耗,-1:输出,0:无功率)
SELECT ts,power,SIGN(power) AS power_direction,CASE WHEN SIGN(power) = 1 THEN '用电'WHEN SIGN(power) = -1 THEN '发电'ELSE '停机'END AS status
FROM d1002
ORDER BY ts;

智能电表场景示例

示例 5: 能流方向统计

目的:统计电表在用电和发电状态下的数据条数,评估双向电能计量情况。

SELECT location,SUM(CASE WHEN SIGN(power) = 1 THEN 1 ELSE 0 END) AS consuming_count,SUM(CASE WHEN SIGN(power) = -1 THEN 1 ELSE 0 END) AS generating_count,SUM(CASE WHEN SIGN(power) = 0 THEN 1 ELSE 0 END) AS idle_count
FROM meters
WHERE ts >= '2024-01-01 10:00:00'AND ts < '2024-01-01 10:05:00'
GROUP BY location;

应用价值

  • 评估分布式光伏发电的并网情况
  • 监测双向电能表的工作状态
  • 为电网调度提供数据支撑

示例 6: 电流方向切换检测(使用 DIFF 函数)

目的:检测电流方向变化事件,识别用电/发电状态切换。

-- 使用 DIFF 函数检测符号变化
SELECT ts,current,SIGN(current) AS current_direction,DIFF(SIGN(current)) AS direction_change_flag,CASE WHEN DIFF(SIGN(current)) != 0 THEN '方向切换'ELSE '方向不变'END AS status
FROM d1001
WHERE current != 0
ORDER BY ts;

应用价值

  • 识别逆变器频繁切换异常
  • 监测光伏发电启停事件
  • 预警电网波动影响

示例 7: 能量流向分类统计

目的:按时间窗口统计不同能量流向的平均功率,评估用电和发电的平衡性。

SELECT _wstart AS time_window,AVG(CASE WHEN SIGN(power) = 1 THEN power ELSE 0 END) AS avg_consume_power,AVG(CASE WHEN SIGN(power) = -1 THEN ABS(power) ELSE 0 END) AS avg_generate_power
FROM meters
WHERE ts >= '2024-01-01 10:00:00'AND ts < '2024-01-01 11:00:00'
INTERVAL(10m);

应用价值

  • 评估发电与用电的时序匹配度
  • 优化储能系统充放电策略
  • 指导微电网能量管理

示例 8: 异常零功率检测

目的:识别非正常的零功率状态(可能是传感器故障或设备离线)。

SELECT ts,voltage,current,power,SIGN(power) AS power_sign
FROM meters
WHERE SIGN(power) = 0AND voltage > 0AND ABS(current) > 0.1
ORDER BY ts;

应用价值

  • 检测功率计量异常
  • 识别互感器故障
  • 预防计量损失

示例 9: 逆功率保护监测

目的:监测逆功率(负功率)持续时间,触发逆功率保护告警。

SELECT ts,power,SIGN(power) AS power_direction
FROM meters
WHERE SIGN(power) = -1AND ABS(power) > 1000
ORDER BY ts;

应用价值

  • 防止逆功率损坏设备
  • 满足电网反送电保护要求
  • 保障用电安全

示例 10: 双向电能累计分离

目的:分别累计正向电能(用电)和反向电能(发电),用于分时计费。

SELECT _wstart AS billing_period,location,SUM(CASE WHEN SIGN(power) = 1 THEN power * 0.001 ELSE 0 END) AS forward_kwh,SUM(CASE WHEN SIGN(power) = -1 THEN ABS(power) * 0.001 ELSE 0 END) AS reverse_kwh
FROM meters
WHERE ts >= '2024-01-01 00:00:00'AND ts < '2024-01-02 00:00:00'
PARTITION BY location
INTERVAL(1d);

应用价值

  • 实现双向电能精确计费
  • 支持光伏发电上网结算
  • 满足分布式能源计量需求

示例 11: 电流功率符号一致性校验

目的:检查电流和功率符号是否一致,识别计量异常或配置错误。

SELECT ts,tbname,current,power,SIGN(current) AS current_sign,SIGN(power) AS power_sign,CASEWHEN SIGN(current) * SIGN(power) < 0 THEN '符号不一致'WHEN SIGN(current) = 0 OR SIGN(power) = 0 THEN '存在零值'ELSE '正常'END AS consistency_check
FROM meters
WHERE ABS(current) > 0.1AND ABS(power) > 10AND ts >= '2024-01-01 10:00:00'
ORDER BY ts;

应用价值

  • 检测互感器接线错误
  • 识别计量配置问题
  • 保证计量准确性

示例 12: 能量流向趋势分析

目的:分析一段时间内能量流向的变化趋势,评估自发自用率。

SELECT _wstart AS hour,COUNT(CASE WHEN SIGN(power) = 1 THEN 1 END) AS consume_samples,COUNT(CASE WHEN SIGN(power) = -1 THEN 1 END) AS generate_samples,COUNT(CASE WHEN SIGN(power) = -1 THEN 1 END) * 100.0 / (COUNT(CASE WHEN SIGN(power) = 1 THEN 1 END) + COUNT(CASE WHEN SIGN(power) = -1 THEN 1 END)) AS generation_ratio
FROM meters
WHERE ts >= '2024-01-01 00:00:00'AND ts < '2024-01-02 00:00:00'
INTERVAL(1h);

应用价值

  • 评估光伏发电利用率
  • 优化储能系统配置
  • 指导用能策略调整

生产场景应用与目的

场景 A: 双向电能计量与分时计费

目的:在分布式光伏、储能等双向电能场景下,需要区分用电(正向)和发电(反向)进行分别计量和计费。

示例

-- 生成双向电能日报表
SELECT location,SUM(CASE WHEN SIGN(power) = 1 THEN power ELSE 0 END) * 0.001 AS consume_kwh,SUM(CASE WHEN SIGN(power) = -1 THEN ABS(power) ELSE 0 END) * 0.001 AS generate_kwh,SUM(CASE WHEN SIGN(power) = 1 THEN power ELSE 0 END) * 0.001 * 0.588 AS consume_fee,SUM(CASE WHEN SIGN(power) = -1 THEN ABS(power) ELSE 0 END) * 0.001 * 0.45 AS generate_income
FROM meters
WHERE ts >= CURRENT_DATEAND ts < CURRENT_DATE + 1d
GROUP BY location;

场景 B: 逆功率保护与安全监测

目的:监测设备是否出现逆功率情况,及时触发保护机制,防止设备损坏或电网事故。

示例

-- 检测逆功率超标事件
SELECT ts,tbname AS meter_id,power,ABS(power) AS reverse_power
FROM meters
WHERE SIGN(power) = -1AND ABS(power) > 2000AND ts >= NOW - 1h
ORDER BY ts DESC;

场景 C: 光伏发电并网监测

目的:监测光伏逆变器的发电状态,统计发电时段和发电量,评估系统运行效率。

示例

-- 统计各电表的发电时长和发电量
SELECT location,COUNT(CASE WHEN SIGN(power) = -1 THEN 1 END) * 5 / 60.0 AS generate_hours,SUM(CASE WHEN SIGN(power) = -1 THEN ABS(power) ELSE 0 END) * 0.001 AS total_generate_kwh,AVG(CASE WHEN SIGN(power) = -1 THEN ABS(power) ELSE NULL END) AS avg_generate_power
FROM meters
WHERE ts >= CURRENT_DATEAND ts < CURRENT_DATE + 1d
GROUP BY location;

场景 D: 设备工况状态识别

目的:通过功率符号快速识别设备的运行状态(用电、发电、停机),简化状态机逻辑。

示例

-- 生成设备状态变化记录
SELECT ts,tbname,CASEWHEN SIGN(power) = 1 THEN '用电中'WHEN SIGN(power) = -1 THEN '发电中'ELSE '停机'END AS device_status,power
FROM meters
WHERE ts >= NOW - 1h
ORDER BY tbname, ts;

场景 E: 计量异常检测

目的:检测电流和功率符号不一致、零功率异常等计量问题,及时发现互感器接线错误或传感器故障。

示例

-- 检测符号异常的数据
SELECT ts,tbname,current,power,SIGN(current) AS current_sign,SIGN(power) AS power_sign
FROM meters
WHERE SIGN(current) * SIGN(power) < 0AND ABS(current) > 0.1AND ABS(power) > 10AND ts >= NOW - 1d
ORDER BY ts DESC;

注意事项

  1. 数据类型一致性:SIGN 函数返回值类型与输入类型一致,整数输入返回整数,浮点输入返回浮点。

  2. 零值判断:对于浮点数,由于精度问题,建议使用 ABS(value) < threshold 判断是否接近零,而不是直接使用 SIGN(value) = 0

  3. NULL 传播:输入为 NULL 时返回 NULL,在条件过滤中需注意 NULL 值的处理。

  4. 性能考虑:SIGN 是简单的标量函数,性能开销极小,可以放心在大数据集中使用。

  5. 与聚合函数配合:SIGN 不能直接与聚合函数混用,但可以嵌套在 CASE 表达式中实现分组统计。

  6. 符号稳定性:对于接近零的微小值,浮点运算可能导致符号不稳定,建议设置合理的阈值进行过滤。


数学关系

  • 基本定义

    • SIGN(x) = 1 当 x > 0
    • SIGN(x) = -1 当 x < 0
    • SIGN(x) = 0 当 x = 0
  • 与其他函数的关系

    • x = SIGN(x) * ABS(x)
    • SIGN(-x) = -SIGN(x)
    • SIGN(x * y) = SIGN(x) * SIGN(y)
  • 常用组合

    • 方向判断:CASE WHEN SIGN(x) = 1 THEN 'positive' ELSE 'negative' END
    • 符号统一:x * SIGN(y) (将 x 的符号调整为与 y 相同)

相关函数

  • ABS:绝对值函数,x = SIGN(x) * ABS(x)
  • CASE:条件表达式,常与 SIGN 配合进行分支处理
  • DIFF:差分函数,可用于检测数值变化和符号切换
  • GREATEST/LEAST:极值比较,可用于符号相关的边界判断

函数意义与实际应用价值

数学意义

SIGN 函数是数学中的符号函数(signum function),将实数域映射到 {-1, 0, 1} 三值集合,是判断数值正负的标准方法。在数值计算、信号处理等领域有广泛应用。

实际应用价值

  1. 双向计量

    • 区分正向和反向电能
    • 支持分布式能源并网计量
    • 实现买电/卖电分离结算
  2. 状态识别

    • 快速判断设备运行模式
    • 简化状态机实现
    • 降低业务逻辑复杂度
  3. 异常检测

    • 识别逆功率异常
    • 检测计量符号错误
    • 预警设备故障
  4. 数据分类

    • 按正负分组统计
    • 实现条件聚合
    • 支持分段分析
  5. 业务规则

    • 实现逆功率保护
    • 支持能量流向控制
    • 满足电网接入要求

本用户手册提供了 SIGN 函数的完整使用说明,特别针对电力系统中的双向电能计量、逆功率监测、光伏并网等实际需求,所有示例均符合 TDengine 语法规范,方便用户快速上手并应用于生产环境。

关于 TDengine

TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,其核心模块是高性能、集群开源、云原生、极简的时序数据库。

它能安全高效地将大量设备每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,并提供 AI 智能体对数据进行预测与异常检测,提供实时的商业洞察。

http://www.dtcms.com/a/533003.html

相关文章:

  • 用vs session做网站保定网站制作排名需要多少钱
  • 黄冈网站推广下载模具 东莞网站建设
  • 三种防重方案对比:标志位、防抖节流、缓存的适用场景
  • 武夷山市网站建设重庆今天最新消息
  • Cline插件中clinerules的选择机制
  • 【Cline】插件中clinerules的实现逻辑分析
  • next.js项目部署流程
  • 整数划分问题
  • 做电子商务网站需要学什么php 网站 整合 数据库
  • 【车载测试常见问题】CAN总线错误帧的常见触发情况
  • 第一ppt模板网站深圳品牌营销推广
  • 国外网站大牛不懂英语可以做吗wordpress热点插件
  • 04、数字电路与 C 语言基础
  • 【代码】八数码难题模板 [宽搜]
  • 震惊!这家滑雪租赁服务商竟让千万用户疯狂抢订!
  • JSP技术入门指南十IDEA开发环境下MySQL数据可视化展示与前后端交互实战
  • 网站建设的思想静态html怎么部署到服务器
  • 餐饮网站建设的目的如何制作境外网站
  • [nanoGPT] configurator.py | exec() globals()
  • 【瑞芯微】【rk3128】【01.使用docker搭建rk3128 编译烧录环境】
  • 企业官网网站优化公司现在网站给源码
  • 知春路网站建设网站建设网络推广柯
  • 002-Spring AI Alibaba Prompt 功能完整案例
  • 网站栏目设计优化方案驾校网站源码下载
  • 大模型-模型压缩:量化、剪枝、蒸馏、二值化 (2)
  • 做文章网站汕尾建设网站首页
  • 数据结构<C++>——链表
  • 数据结构-并查集
  • 该如何建设和优化一个网站网页设计与制作工资多少
  • 建设自己的网站有什么wordpress radiate