POSTFRESQL系列:SQL中使用正则校验处理

这里写自定义目录标题

需求描述

  • 需要处理数据库表中某一个字段对应的数据,存储的时候是字符类型,插入数据逻辑中没有做较强的限制,导致后期业务需求中需要获取统一数据处理的时候的产生了不必要的问题。
  • 以上是使用sql级别解决

SQL部分

sql 复制代码
COALESCE(NULLIF(REGEXP_REPLACE(dataTable.ziduan, '[^0-9]', '', 'g'), ''), '0')::NUMERIC < 80

SQL部分解释

  1. 这个函数使用正则表达式 \^0-9 匹配非数字字符,将它们替换为空字符串。

    sql 复制代码
    REGEXP_REPLACE(dataTable.ziduan, '[^0-9]', '', 'g'):
  2. 如果 dataTable.ziduan 列中全是非数字字符,替换后的结果将是空字符串。通过 NULLIF 将空字符串转换为 NULL。

    sql 复制代码
        NULLIF(REGEXP_REPLACE(...), ''):
  3. 使用 COALESCE 来处理 NULL 值,如果 NULLIF 返回 NULL,则使用默认值 '0'。

    sql 复制代码
      COALESCE(NULLIF(...), '0'):
  4. 将最终结果转换为 NUMERIC 类型,以便可以进行数值比较。

    sql 复制代码
        ::NUMERIC:
  5. < 80这部分是将数值与 80 进行比较。

SQL部分大量执行的效率如何?

  1. REGEXP_REPLACE 函数:

    正则表达式的处理通常比直接字符串操作要慢,尤其是当需要遍历和替换整个字符串时。因此,这一步是最消耗性能的部分。如果你的数据集非常大,REGEXP_REPLACE 可能成为瓶颈。

  2. NULLIF 和 COALESCE 函数:

    这两个函数的执行开销相对较小。NULLIF 只是简单地比较两个值,COALESCE 也只是在一组值中找到第一个非空值,这两者的性能通常都不会成为瓶颈。

  3. 数据类型转换 (::NUMERIC):

    数据类型的转换(特别是字符串到数值的转换)可能会消耗一定的资源,特别是在大量数据的情况下。虽然这一步通常不会成为主要的性能瓶颈,但它仍然对整体性能有影响。

优化方向

  1. 尽量减少正则表达式的使用:

    如果你可以确保 dataTable.ziduan 列中的数据大部分是有效的数字,并且只在极少数情况下出现非数字字符,你可以考虑预先清洗数据,避免在查询时使用正则表达式。

  2. 数据库列类型的优化:

    如果可能,将dataTable.ziduan 列的类型直接存储为 NUMERIC 或者 INTEGER 而不是字符串,这样可以完全避免后续查询中的类型转换和正则表达式处理,提高查询性能。

  3. 索引优化:

    如果这个查询非常频繁,可以考虑在相关列上创建索引。不过,需要注意的是,这种情况下使用 REGEXP_REPLACE 可能无法有效利用索引。

  4. 缓存查询结果:

    如果你的查询经常涉及到相同的计算,可以考虑使用缓存来保存处理后的结果,避免每次查询时都进行重复计算。

相关推荐
砚底藏山河19 分钟前
容错重试与指数退避:网络抖动手抖不再丢数据(魔码量化实战 #04)
java·数据库·python·金融
蓝速科技1 小时前
会议室门牌触控预约选型与落地实战指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
蓝速科技1 小时前
企业展厅数字人导览效果提升与选型实战指南丨蓝速科技
大数据·运维·数据库·人工智能·科技·microsoft
奔跑吧树袋熊1 小时前
多租户隔离该做到哪一层:从连接池到 ORM 的取舍
开发语言·数据库·oracle·系统架构
罗光记1 小时前
全能 Go Agent 框架 Covonaut v1.1.2发布:终端对话加入旁问与三档输出
数据库·经验分享·其他·百度·新浪微博
Htr_2 小时前
Anysite.io 使用指南:把整个 Web 变成 AI 智能体的数据库
前端·数据库·人工智能
Lyra_Infra2 小时前
记一次麒麟 Linux 下达梦数据库 (DM8) 部署与 MySQL 命令行无界面迁移踩坑指南
数据库·后端·dba
晚安日记wanna2 小时前
只会答加索引MySQL 调优还能聊这 7 个点
数据库·面试
YHHLAI2 小时前
从零理解 Agent Memory 管理:内存记忆、文件持久化与上下文截断
数据库·oracle
cspttty2 小时前
2026市场分析师校招能力模型:SQL、Excel、BI与业务分析
大数据·数据库