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

TDengine 字符串函数 POSITION 用户手册

在这里插入图片描述

POSITION 函数使用手册

函数概述

函数名称:POSITION
返回子串在目标字符串中首次出现的位置(1-based),不存在返回 0,参数为 NULL 返回 NULL。

语法

POSITION(expr1 IN expr2)

参数说明

  • expr1:要查找的子串,类型 VARCHAR/NCHAR,必填。
  • expr2:被搜索的目标字符串,类型 VARCHAR/NCHAR,必填。

返回值

  • 类型:BIGINT
  • 说明:
    • 返回子串在目标字符串中首次出现的位置,位置从 1 开始;
    • 若未找到返回 0;
    • 若任一参数为 NULL 返回 NULL;
    • 空串视为可匹配,POSITION(‘’ IN ‘abc’) 返回 1。

特性与注意事项

  • 多字节安全:以字符为单元计算位置(对 UTF‑8 多字节字符正确处理)。
  • 区分大小写:匹配时区分大小写,必要时与 LOWER/UPPER 联用。
  • 返回值为 1-based;与某些编程语言的 0-based 索引不同。
  • 可用于 WHERE、SELECT、子查询和聚合场景(配合子查询或 CASE 使用)。

智能电表示例数据结构

请参考或创建超级表与示例数据:

CREATE STABLE test.meters (`ts` TIMESTAMP,`current` FLOAT,`voltage` INT,`phase` FLOAT
) TAGS (`groupid` INT,`location` VARCHAR(100)
);INSERT INTO test.d001 USING test.meters TAGS(1, 'Beijing-Chaoyang-Building-A-Floor-10')
VALUES ('2024-01-15 08:00:00', 10.5, 220, 0.85);INSERT INTO test.d002 USING test.meters TAGS(2, 'SHANGHAI-Pudong-Tower-B-Floor-20')
VALUES ('2024-01-15 08:00:00', 12.3, 221, 0.88);INSERT INTO test.d003 USING test.meters TAGS(3, 'Guangzhou-Tianhe-Plaza-C-Floor-15')
VALUES ('2024-01-15 08:00:00', 9.8, 219, 0.82);

使用示例(智能电表场景)

  1. 基本查找位置
SELECT tbname, location, POSITION('Floor' IN location) AS pos FROM test.meters;

用途:判断位置信息是否包含楼层关键字并返回其位置,方便后续 SUBSTRING 解析。

  1. 提取城市名称(基于 ‘-’ 分隔格式)
SELECTtbname,location,SUBSTRING(location, 1, POSITION('-' IN location) - 1) AS city
FROM test.meters;

目的:从 location 中抽取城市用于分组或聚合统计(与 LOWER 配合可实现大小写无关分组)。

  1. 数据质量检测:查找不规范记录(缺少某关键字段)
SELECT tbname, location
FROM test.meters
WHERE POSITION('-' IN location) = 0;

目的:定位未按约定格式填写的位置信息,便于清洗。

  1. 条件筛选(楼层编号存在且在范围内)
-- 假设 Floor-10 的格式固定,先定位 'Floor-' 再截取数字(示意)
SELECT tbname, location
FROM test.meters
WHERE POSITION('Floor-' IN location) > 0AND CAST(SUBSTRING(location, POSITION('Floor-' IN location) + 6) AS INT) BETWEEN 5 AND 20;

用途:快速筛选指定楼层范围内的设备用于巡检。

  1. 与 CASE 联用实现标签化
SELECTtbname,CASEWHEN POSITION('Pudong' IN location) > 0 THEN 'Pudong Area'WHEN POSITION('Tianhe' IN location) > 0 THEN 'Tianhe Area'ELSE 'Other'END AS area
FROM test.meters;

目的:按地理关键词对设备打标签,便于统计和告警分组。

场景与目的汇总

  • 字段解析:基于位置字符串拆分并提取子域(城市、楼栋、楼层),用于聚合统计与权限控制。
  • 数据质量检查:发现不符合格式或缺少关键子串的记录,触发修正流程。
  • 条件筛选与分组:在 WHERE/CASE 中以是否包含子串做筛选或分类(比 LIKE 更精确用于位置标记)。
  • 自动化维护:配合 SUBSTRING、POSITION 可实现自动字段拆分与标准化策略,便于下游分析与告警。

性能建议

  • POSITION 是字符串查找操作,对较短 TAG 字段开销小;在大规模数据中频繁使用时,建议先按时间或分区筛选再执行。
  • 若需大量重复查询同一字段的解析,考虑在写入时做预处理并存储解析结果以减少实时计算开销。

相关函数

  • SUBSTRING / SUBSTR:截取子串,常与 POSITION 配合使用。
  • LIKE / LIKE_IN_SET / FIND_IN_SET:不同匹配语义(模糊/精确/集合匹配)。
  • LOWER / UPPER:配合实现大小写不敏感查找。
  • LENGTH / CHAR_LENGTH:用于校验字符串长度与存储评估。

关于 TDengine

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

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

相关文章:

  • 燕郊建设局网站网站排名首页前三位
  • Docker容器使用手册——进阶篇(下)
  • C++入门指南:开启你的编程之旅
  • 智取能量:如何最大化战斗分数?
  • php网站开发技术要点网站模板制作流程
  • 进程和诊断工具速查手册(8.13):VMMap / DebugView / LiveKd / Handle / ListDLLs 一页式现场排障清单
  • 【ros2】ROS2话题(Topic)通信完全指南:订阅与发布详解
  • 网站安全证书有问题如何解决网站地图如何做
  • 演练:使用VB开发多智能体协作的荣格八维分析器
  • 第8章 广播机制
  • 最近的一对
  • 网站设计建网站互联网是做什么的
  • 【C++】AVL树:详细使用及旋转
  • 网站开发技术的雏形 cgi满18点此转入2o2
  • 小华HC32L136K8TA 单片机新建 MDK5 工程模板(二)
  • Qt告警clazy-detaching-temporary浅谈
  • 前端构建工具扩展,Webpack插件开发
  • 拆解 LLM 的 “思考” 过程:推理机制深度解读
  • 《嵌入式成长系列之51单片机 --- Keil5创建工程》
  • 万米单波束EA640的raw数据处理
  • 成都公租房官方网站中南建设网官方网站
  • Cursor Chrome DevTools MCP 配置指南 for Windows
  • 汕头网站设计浩森宇特响应式网页设计图
  • 中职网站建设教学计划学网页设计软件开发
  • SpringBoot中Get请求和POST请求接收参数详解
  • 局部可变形模板匹配算法的初步实现
  • NFS服务
  • python多继承的类型定义了同一个属性或者方法
  • Springboot中CommandLineRunner的用法以及执行顺序的控制
  • (60页PPT)IDC云数据中心机房运维服务解决方案(附下载方式)