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

TDengine 字符串函数 FIND_IN_SET 用户手册

在这里插入图片描述

FIND_IN_SET 函数使用手册

函数概述

函数名称: FIND_IN_SET

函数类型: 字符串标量函数

功能说明: 将字符串 expr2expr3 为分隔符切分为一个字符串列表,返回 expr1 在该列表中的序号。如存在多个匹配项,则返回第一个匹配项的序号;不存在则返回 0。

支持版本: TDengine 3.0+

语法格式

FIND_IN_SET(expr1, expr2[, expr3])

参数说明

参数说明数据类型是否必填
expr1要查找的字符串VARCHAR、NCHAR
expr2被分割的源字符串列表VARCHAR、NCHAR
expr3分隔符(默认为,)VARCHAR、NCHAR

返回值

  • 返回类型: BIGINT
  • 返回说明:
    • 找到匹配项:返回该项在列表中的位置序号(从1开始)
    • 未找到匹配:返回 0
    • 参数包含 NULL:返回 NULL

使用说明

  1. 序号从 1 开始计数
  2. 如果 expr3 未指定,默认使用逗号 , 作为分隔符
  3. expr3 不可以是 NULL 或空字符串
  4. 匹配时区分大小写
  5. 如果 expr1expr2 为 NULL,则返回 NULL
  6. 适用于内层查询和外层查询
  7. 适用于表和超级表

使用场景示例

场景一:设备分组查询

业务背景: 电力运维系统需要快速查找特定设备所属的运维分组

-- 创建超级表
CREATE STABLE test.meters (`ts` TIMESTAMP, `current` FLOAT, `voltage` INT, `phase` FLOAT
) TAGS (`groupid` INT, `location` VARCHAR(24)
);-- 插入测试数据
INSERT INTO test.d001 USING test.meters TAGS(1, 'Beijing-A1,Shanghai-B2,Guangzhou-C3') 
VALUES ('2024-01-15 08:00:00', 10.5, 220, 0.85);-- 查询:判断设备是否属于上海区域
SELECT tbname,location,FIND_IN_SET('Shanghai-B2', location) as `position`,CASE WHEN FIND_IN_SET('Shanghai-B2', location) > 0 THEN '属于上海区域'ELSE '不属于上海区域'END as region_status
FROM test.meters;

输出示例:

tbname | location                              | position | region_status
-------|---------------------------------------|----------|---------------
d001   | Beijing-A1,Shanghai-B2,Guangzhou-C3  | 2        | 属于上海区域

目的: 快速定位设备所属区域,便于运维人员按区域筛选设备


场景二:告警级别筛选

业务背景: 根据电压异常情况筛选需要优先处理的告警

-- 定义告警级别列表
-- 高危:'critical',紧急:'urgent',警告:'warning'SELECT ts,tbname,voltage,CASE WHEN voltage > 240 THEN 'critical'WHEN voltage > 230 THEN 'urgent'WHEN voltage < 200 THEN 'critical'ELSE 'normal'END as alert_level
FROM test.meters
WHERE FIND_IN_SET(CASE WHEN voltage > 240 THEN 'critical'WHEN voltage > 230 THEN 'urgent'WHEN voltage < 200 THEN 'critical'ELSE 'normal'END, 'critical,urgent'
) > 0
ORDER BY ts DESC
LIMIT 10;

目的: 筛选出需要紧急处理的告警记录(critical 和 urgent 级别),提高运维响应效率


场景三:多标签设备过滤

业务背景: 设备带有多个运维标签,需要根据标签快速检索

-- 假设 location 字段存储多标签,如 'tag1|tag2|tag3'
CREATE STABLE test.device_tags (`ts` TIMESTAMP,`current` FLOAT
) TAGS (`tags` VARCHAR(100)
);-- 插入数据
INSERT INTO test.dev001 USING test.device_tags TAGS('high_priority|outdoor|solar_powered') 
VALUES ('2024-01-15 10:00:00', 15.2);INSERT INTO test.dev002 USING test.device_tags TAGS('indoor|backup|grid_powered') 
VALUES ('2024-01-15 10:00:00', 8.5);-- 查询:查找所有户外设备
SELECT tbname,`tags`,current,FIND_IN_SET('outdoor', `tags`, '|') as tag_position
FROM test.device_tags
WHERE FIND_IN_SET('outdoor', `tags`, '|') > 0;

输出示例:

tbname  | tags                               | current | tag_position
--------|------------------------------------|---------|--------------
dev001  | high_priority|outdoor|solar_powered| 15.2    | 2

目的: 支持灵活的多维度标签检索,自定义分隔符适应不同数据格式


场景四:动态权限控制

业务背景: 根据用户权限列表判断是否有权限访问特定区域的设备数据

-- 模拟用户权限表(实际应用中可能从权限系统获取)
-- 假设当前用户权限: 'Beijing,Shanghai,Shenzhen'SELECT tbname,location,ts,voltage,current
FROM test.meters
WHERE FIND_IN_SET(location,'Beijing,Shanghai,Shenzhen'
) > 0
ORDER BY ts DESC
LIMIT 20;

目的: 实现基于权限的数据访问控制,用户只能看到授权区域的设备数据


注意事项

  1. 性能考虑: 对于大量数据,建议配合索引或时间范围过滤使用
  2. 大小写敏感: 字符串匹配区分大小写,必要时使用 UPPER()LOWER() 函数
  3. 分隔符选择: 避免使用数据中可能出现的字符作为分隔符
  4. NULL 处理: 确保关键字段不为 NULL,或在查询中添加 NULL 值判断

相关函数

  • LIKE_IN_SET: 使用 LIKE 运算符语义进行模糊匹配
  • REGEXP_IN_SET: 使用正则表达式进行匹配
  • POSITION: 查找子串位置
  • SUBSTRING: 字符串截取

关于 TDengine

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

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

相关文章:

  • FastAPI × SQLAlchemy 2.0 Async:从“能跑”到“可压测”的完整工程实践
  • 伪装图像生成之——GAN与Diffusion
  • 分布式系统中的CAP理论和BASE理论
  • 做网站建设的怎么赢利网站建设多少费用
  • Python字典--第1关:元组使用:这份菜单能修改吗?
  • 【S2ANet】Align Deep Features for Oriented Object Detection 译读笔记
  • 二维数组及经典案例
  • 【VMware Workstation】虚拟机网络配置流程+MobaXterm连接步骤
  • 西安微网站建设wordpress视频预览插件
  • CodeBuddy + GLM-4.6:儿童诗词宝典全栈开发实战
  • PSU过程11.2.0.4.250415
  • Nanopb基本概念
  • 微网站开发平台 知乎东家乐装修公司简介
  • 基于交替方向乘子法(ADMM)的RPCA MATLAB实现
  • redis删除一个键用del还是unlink
  • 用vue.js做网站百度区域代理
  • 好人一生平安网站哪个好抖音代运营培训
  • 前端基础面试题(Css,Html,Js,Ts)
  • 使用c#强大的SourceGenerator现对象的深克隆
  • 企业移动网站建设网站文件夹命名规则
  • 【动态链接库】一、VS下基本制作与使用
  • 百度网站排名规则长春百度快速优化
  • xpert AI工作流工具本地部署
  • SP30N06NK 30V N沟道MOSFET技术解析与应用指南
  • 深圳建站公司推荐国内平台有哪些
  • 使用DFSDM模拟看门狗做过流保护以及封波应用 LAT1612
  • 远程传输大文件的软件有哪些?
  • 北京建设官方网站渠道网络大厦
  • 鸿蒙 Next 如何使用 AVRecorder 从0到1实现视频录制功能(ArkTS)
  • 动态背景网站北京网站设计制作费用