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

TDengine 字符串函数 REGEXP_IN_SET 用户手册

在这里插入图片描述

REGEXP_IN_SET 函数用户手册

函数定义

REGEXP_IN_SET(expr1, expr2[, expr3])

功能说明

一句话描述: 使用正则表达式在字符串列表中查找匹配项,返回第一个匹配成功的模式位置。

expr2expr3 为分隔符切分为一个字符串列表,将 expr1 作为正则表达式匹配列表中的字符串,返回第一个匹配项的序号,无匹配项则返回 0。

参数说明

参数说明类型必填
expr1正则表达式模式VARCHAR、NCHAR
expr2待匹配的字符串列表(用分隔符分隔)VARCHAR、NCHAR
expr3分隔符(默认为 ,)VARCHAR、NCHAR

说明:

  • expr3 不可以是 NULL 或空串
  • expr1 必须是有效的正则表达式语法
  • 支持标准正则表达式元字符: . * + ? [] ^ $ | ()

返回值

  • 类型: BIGINT
  • 返回: 第一个匹配的字符串在列表中的位置(从 1 开始)
  • 无匹配: 返回 0
  • NULL 值: 如果 expr1expr2 为 NULL,返回 NULL

适用范围

  • 数据类型: VARCHAR、NCHAR
  • 参数个数: 最小 2 个,最大 3 个
  • 适用于: 表和超级表
  • 子查询: 支持内层和外层查询

与相关函数的区别

函数匹配方式通配符性能适用场景
REGEXP_IN_SET正则表达式完整正则语法最慢复杂模式匹配
LIKE_IN_SETLIKE 模糊匹配%_较慢简单通配符
FIND_IN_SET精确匹配不支持最快精确字符串

对比示例:

-- FIND_IN_SET: 精确匹配
SELECT FIND_IN_SET('Beijing-A1', 'Beijing,Shanghai,Guangzhou');
-- 返回: 0 (无精确匹配)-- LIKE_IN_SET: 简单通配符
SELECT LIKE_IN_SET('Beijing-A1', 'Beijing%,Shanghai%,Guangzhou%');
-- 返回: 1 (匹配 'Beijing%' 模式)-- REGEXP_IN_SET: 正则表达式
SELECT REGEXP_IN_SET('Beijing-A1', '^Beijing-[A-Z][0-9]+$,^Shanghai-.*,^Guangzhou-.*');
-- 返回: 1 (匹配第一个正则模式)

使用场景示例

场景 1: 智能电表设备编号验证

业务需求: 验证设备位置编码是否符合多种命名规范

-- 创建智能电表超级表
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-BJ-Building-A01-Floor-10')
VALUES ('2024-01-15 08:00:00', 10.5, 220, 0.85);INSERT INTO test.d002 USING test.meters TAGS(2, 'Shanghai-SH-Tower-B23-Floor-20')
VALUES ('2024-01-15 08:00:00', 12.3, 221, 0.88);INSERT INTO test.d003 USING test.meters TAGS(3, 'Guangzhou-Invalid-Format')
VALUES ('2024-01-15 08:00:00', 9.8, 219, 0.82);INSERT INTO test.d004 USING test.meters TAGS(4, 'Shenzhen-SZ-Center-C99-Floor-30')
VALUES ('2024-01-15 08:00:00', 10.8, 220, 0.87);-- 使用正则表达式验证位置编码格式
-- 格式规范: 城市-代码-建筑类型-编号-Floor-楼层
SELECT tbname,location,REGEXP_IN_SET(location, '^[A-Za-z]+-[A-Z]{2}-[A-Za-z]+-[A-Z][0-9]{2}-Floor-[0-9]+$') AS format_check,CASE WHEN REGEXP_IN_SET(location, '^[A-Za-z]+-[A-Z]{2}-[A-Za-z]+-[A-Z][0-9]{2}-Floor-[0-9]+$') > 0 THEN '格式正确'ELSE '格式错误'END AS validation_result
FROM test.meters;

输出示例:

tbname | location                                    | format_check | validation_result
-------|---------------------------------------------|--------------|-------------------
d001   | Beijing-BJ-Building-A01-Floor-10           | 1            | 格式正确
d002   | Shanghai-SH-Tower-B23-Floor-20             | 1            | 格式正确
d003   | Guangzhou-Invalid-Format                   | 0            | 格式错误
d004   | Shenzhen-SZ-Center-C99-Floor-30            | 1            | 格式正确

目的: 自动化数据质量检查,识别不符合命名规范的设备


场景 2: 多区域设备筛选(正则表达式)

业务需求: 筛选符合特定区域命名模式的设备

-- 筛选北京、上海、深圳区域的设备(支持多种命名格式)
-- 支持格式: Beijing/BJ/北京, Shanghai/SH/上海, Shenzhen/SZ/深圳
SELECT tbname,location,voltage,current,REGEXP_IN_SET(location,'^(Beijing|BJ|北京).*,^(Shanghai|SH|上海).*,^(Shenzhen|SZ|深圳).*') AS region_match_index
FROM test.meters
WHERE REGEXP_IN_SET(location,'^(Beijing|BJ|北京).*,^(Shanghai|SH|上海).*,^(Shenzhen|SZ|深圳).*'
) > 0;

输出示例:

tbname | location                            | voltage | current | region_match_index
-------|-------------------------------------|---------|---------|--------------------
d001   | Beijing-BJ-Building-A01-Floor-10   | 220     | 10.5    | 1
d002   | Shanghai-SH-Tower-B23-Floor-20     | 221     | 12.3    | 2
d004   | Shenzhen-SZ-Center-C99-Floor-30    | 220     | 10.8    | 3

目的: 实现灵活的多区域、多命名格式的设备筛选


场景 3: 设备型号识别

业务需求: 根据位置字符串识别建筑类型

-- 识别建筑类型(Building/Tower/Center/Plaza等)
SELECT tbname,location,CASE WHEN REGEXP_IN_SET(location, '-(Building|大楼)-') = 1 THEN 'Office Building'WHEN REGEXP_IN_SET(location, '-(Tower|塔楼)-') = 1 THEN 'High-rise Tower'WHEN REGEXP_IN_SET(location, '-(Center|中心)-') = 1 THEN 'Commercial Center'WHEN REGEXP_IN_SET(location, '-(Plaza|广场)-') = 1 THEN 'Shopping Plaza'ELSE 'Other'END AS building_type,voltage
FROM test.meters;

输出示例:

tbname | location                            | building_type    | voltage
-------|-------------------------------------|------------------|--------
d001   | Beijing-BJ-Building-A01-Floor-10   | Office Building  | 220
d002   | Shanghai-SH-Tower-B23-Floor-20     | High-rise Tower  | 221
d004   | Shenzhen-SZ-Center-C99-Floor-30    | Commercial Center| 220

目的: 自动分类设备所属建筑类型


实际应用优势

1. 强大的模式匹配能力

-- 匹配多种日期格式
SELECT REGEXP_IN_SET('2024-01-15','^\d{4}-\d{2}-\d{2}$,^\d{2}/\d{2}/\d{4}$,^\d{8}$'
);
-- 可匹配: 2024-01-15, 01/15/2024, 20240115

2. 数据验证与清洗

-- 验证设备编号格式
SELECT * FROM test.meters
WHERE REGEXP_IN_SET(location,'^[A-Z]{2,}-[A-Z]{2}-[A-Za-z]+-[A-Z][0-9]+-Floor-[0-9]+$'
) = 0;  -- 查找不符合格式的记录

3. 灵活的分组统计

-- 按建筑类型统计(支持中英文)
SELECT CASE WHEN REGEXP_IN_SET(location, '-(Building|大楼)-') > 0 THEN 'Building'WHEN REGEXP_IN_SET(location, '-(Tower|塔楼)-') > 0 THEN 'Tower'ELSE 'Other'END AS type,COUNT(*) AS count
FROM test.meters
GROUP BY type;

性能建议

  1. 复杂度控制: 正则表达式越复杂,性能越低
  2. 优先级选择:
    • 精确匹配 → 使用 FIND_IN_SET
    • 简单通配符 → 使用 LIKE_IN_SET
    • 复杂模式 → 使用 REGEXP_IN_SET
  3. 模式数量: 建议单次查询不超过 10 个正则模式
  4. 索引无法使用: WHERE 中使用正则函数无法利用索引

注意事项

  1. 正则语法: 必须符合标准正则表达式语法
  2. 大小写敏感: 默认区分大小写,需要时使用 (?i) 标志
  3. 转义字符: 特殊字符需要转义,如 \. \+ \*
  4. NULL 处理: 任何参数为 NULL 都返回 NULL
  5. 性能影响: 在大数据集上谨慎使用
  6. 分隔符限制: 分隔符不能为 NULL 或空字符串

正则表达式语法速查

元字符说明示例
.匹配任意单个字符a.c 匹配 abca1c
*匹配前面字符 0 次或多次ab*c 匹配 acabc
+匹配前面字符 1 次或多次ab+c 匹配 abcabbc
?匹配前面字符 0 次或 1 次ab?c 匹配 acabc
^匹配字符串开始^abc 匹配以 abc 开头
$匹配字符串结束abc$ 匹配以 abc 结尾
[...]字符类,匹配括号内任一字符[abc] 匹配 abc
[^...]否定字符类[^abc] 匹配除 abc
\d匹配数字,等价于 [0-9]\d+ 匹配一个或多个数字
\w匹配字母、数字、下划线\w+ 匹配单词
\s匹配空白字符\s+ 匹配空格、制表符
``或运算符
()分组(ab)+ 匹配 ababab

相关函数

  • FIND_IN_SET(): 精确匹配版本
  • LIKE_IN_SET(): LIKE 通配符匹配版本
  • LIKE: 单模式 LIKE 匹配
  • POSITION(): 子串位置查找

关于 TDengine

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

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

相关文章:

  • 佛山市外贸网站建设公司因网站开发需要
  • 神经网络组植物分类学习规划与本周进展综述15
  • 做律师事务所网站牡丹江住房和城乡建设厅网站
  • 上海崇明林业建设有限公司 网站建设 市民中心网站
  • 在UEC++中使用什么方式返回像 FTransform 这种类型的值
  • GPT‑OSS‑20B MoE 在昇腾 NPU 上的部署与性能实测:开发者视角的多精度推理优化实践
  • 后端服务弹性伸缩实践实践:让系统更高效、稳定
  • 网站的比较做网站哪家便宜
  • 寻找昆明网站建设手机网站 跳转
  • 建站网址大全56做视频网站
  • jsp网站开发教程响应式布局是什么意思
  • dede中英文企业网站建筑方案设计案例
  • 常见网站颜色搭配技术导航源码
  • 简单响应式网站设计代码翻书效果的网站
  • 网站seo方案建议电影网站怎么做优化
  • 网站开发外包不给ftp外贸推广方式
  • 百度 网站 说明qq是哪家公司运营的
  • 门头设计效果图网站西安学网站开发哪边好
  • 公司网站模板源代码沈阳百度seo
  • 房产网站怎么做才能吸引人怎样做自己网站
  • 不错宁波seo公司网站优化 推广
  • 好的网站首页建设公司网站托管费用 优帮云
  • 企业网站策划方案模板品牌设计网站建设
  • 微科技h5制作网站模板下载网站建设龙卡要审批多久时间
  • 响应式 网站 设计软件苏州网站开发网站开发费用
  • 要建网站建立平台的目的
  • ui在线设计网站在线设计网站海报
  • 网站建设和网络推广外包wordpress 云解析视频教程
  • 九寨沟城乡建设官方网站drupal 做的网站
  • 站长工具网站测速微信红包开发平台