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

Oracle SQL: TRANSLATE 和 REGEXP_LIKE 的知识点详细分析

目录

  • 前言
  • 1. TRANSLATE
  • 2. REGEXP_LIKE
  • 3. 实战

前言

🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF

1. TRANSLATE

TRANSLATE 用于替换字符串中指定字符集的每个字符,返回替换后的字符串

逐一映射输入字符串的字符到目标字符集,没有提供复杂的模式匹配功能

语法:

TRANSLATE(string, from_string, to_string)
  • string:需要替换的原字符串
  • from_string:要被替换的字符集
  • to_string:替换后的字符集

注意:from_string 和 to_string 是按位置一一对应的,to_string 中没有对应字符的位置会被删除

特点:

  • TRANSLATE 不支持正则表达式,仅支持简单的字符替换
  • 如果 from_string 的某个字符没有对应的 to_string 字符,替换后的结果会删除该字符。
    替换后的结果可以为空字符串,但不会返回 NULL

整体Demo如下:

-- 示例 1: 基础字符替换
SELECT TRANSLATE('123ABC', '123', 'XYZ') AS RESULT FROM DUAL;
-- 输出: 'XYZABC'-- 示例 2: 删除字符
SELECT TRANSLATE('123ABC', '123', '') AS RESULT FROM DUAL;
-- 输出: 'ABC'-- 示例 3: 替换多个字符
SELECT TRANSLATE('HELLO WORLD', 'HEL', 'XYZ') AS RESULT FROM DUAL;
-- 输出: 'XYZO WORLD'

截图如下:

在这里插入图片描述

2. REGEXP_LIKE

REGEXP_LIKE 用于对字符串进行正则表达式匹配判断,返回布尔值(TRUE 或 FALSE)

是 Oracle 提供的正则表达式匹配函数,可以处理复杂的字符串模式

特别说明的是

REGEXP_LIKE 在 Oracle 中是一个布尔函数,只能用在条件上下文(如 WHERE、CASE)中,不能直接作为一个结果列返回

基本语法:

REGEXP_LIKE(string, pattern [, match_parameter])

基本参数如下:

  • string:需要匹配的字符串
  • pattern:正则表达式
  • match_parameter:可选,用于指定匹配行为(如大小写敏感等)
    ‘i’:忽略大小写
    ‘c’:区分大小写(默认)
    ‘n’:允许匹配字符串中的换行符
    ‘m’:启用多行模式

错误Demo:

-- 示例 1: 检查字符串是否仅由数字组成
SELECT REGEXP_LIKE('12345', '^[0-9]+$') AS IS_NUMERIC FROM DUAL;-- 示例 2: 检查字符串是否包含字母 'A'
SELECT REGEXP_LIKE('123A45', '[A-Za-z]') AS CONTAINS_ALPHA FROM DUAL;-- 示例 3: 匹配复杂模式(检查是否为邮箱格式)
SELECT REGEXP_LIKE('user@example.com', '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$') AS IS_EMAIL FROM DUAL;-- 示例 4: 使用匹配参数忽略大小写
SELECT REGEXP_LIKE('Oracle', '^oracle$', 'i') AS IGNORE_CASE_MATCH FROM DUAL;

会输出如下:ORA-00904: "REGEXP_LIKE": invalid identifier

在这里插入图片描述

正确Demo:

在 WHERE 子句中使用 REGEXP_LIKE:

-- 示例 1: 检查字符串是否仅由数字组成
SELECT '12345' AS INPUT_VALUE
FROM DUAL
WHERE REGEXP_LIKE('12345', '^[0-9]+$');
-- 输出: '12345'

截图如下:

在这里插入图片描述

使用 CASE 包装 REGEXP_LIKE:

-- 示例 2: 检查字符串是否包含字母 'A'
SELECT CASE WHEN REGEXP_LIKE('123A45', '[A-Za-z]') THEN 'TRUE'ELSE 'FALSE'END AS CONTAINS_ALPHA
FROM DUAL;
-- 输出: TRUE

检查复杂模式(如邮箱格式)

-- 示例 3: 验证是否为邮箱格式
SELECT CASE WHEN REGEXP_LIKE('user@example.com', '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$') THEN 'TRUE'ELSE 'FALSE'END AS IS_EMAIL
FROM DUAL;
-- 输出: TRUE

忽略大小写匹配

-- 示例 4: 区分大小写和忽略大小写
SELECT CASE WHEN REGEXP_LIKE('Oracle', '^oracle$', 'i') THEN 'TRUE'ELSE 'FALSE'END AS IGNORE_CASE_MATCH
FROM DUAL;
-- 输出: TRUE

特别注意:

  • REGEXP_LIKE 是布尔型函数,因此在 SELECT 列表中无法直接输出 TRUE 或 FALSE,需要通过 CASE 转换为可显示的字符串结果
  • 如果在 WHERE 子句中使用,只有匹配成功的记录会返回结果

3. 实战

实战中发现两个字段的格式都不一样:

在这里插入图片描述

具体差异如下:

查询内容第一条查询 TRANSLATE第二条查询 REGEXP_LIKE
功能差异替换掉所有数字后检查是否为空字符串检查字符串是否完全匹配数字正则表达式
处理空格不处理空格,空格被保留使用 TRIM 去掉空格后进行匹配
处理特殊字符替换后仍存在非数字字符会返回非空字符串,不符合计数条件如果存在特殊字符,直接无法匹配
性能差异TRANSLATE 速度更快,适合简单字符替换REGEXP_LIKE 功能更强大,但性能可能稍差
可能的差异会忽略空格和部分特殊字符的影响,统计结果可能更大精确匹配数字,统计结果可能更小

实际结果的比较:

DEVICE_ID第一条结果 (TRANSLATE)第二条结果 (REGEXP_LIKE)
123456计入计入
123456 (多个空格)不计入计入 (通过TRIM)
abc123不计入不计入
000计入计入
123@456不计入不计入

如果 DEVICE_ID 存在空格或特殊字符,REGEXP_LIKE 会更精确
如果 DEVICE_ID 仅考虑数字部分,TRANSLATE 会更宽松一些

相关文章:

Oracle SQL: TRANSLATE 和 REGEXP_LIKE 的知识点详细分析

目录 前言1. TRANSLATE2. REGEXP_LIKE3. 实战 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. TRANSLATE TRANSLATE 用于替换字符串中指定字符集的每个字符,返回替换后的字符串 逐一映射输入字…...

RabbitMQ 在实际应用时要注意的问题

1. 幂等性保障 1.1 幂等性介绍 幂等性是数学和计算机科学中某些运算的性质,它们可以被多次应⽤,⽽不会改变初始应⽤的结果. 应⽤程序的幂等性介绍 在应⽤程序中,幂等性就是指对⼀个系统进⾏重复调⽤(相同参数),不论请求多少次,这些请求对系统的影响都是相同的效果. ⽐如数据库…...

算法日记8:StarryCoding60(单调栈)

一、题目 二、解题思路: 题意为让我们找到每个元素的左边第一个比它小的元素,若不存在则输出-1 2.1法一:暴力(0n2) 首先,我们可以想到最朴素的算法:直接暴力两层for达成目标核心代码如下&…...

大象机器人发布首款穿戴式数据采集器myController S570,助力具身智能数据收集!

myController S570 具有较高的数据采集速度和远程控制能力,大大简化了人形机器人的编程。 myController S570 是一款可移动的轻量级外骨骼,具有 14 个关节、2 个操纵杆和 2 个按钮,它提供高数据采集速度,出色的兼容性&#xff0c…...

【银河麒麟高级服务器操作系统】业务访问慢网卡丢包现象分析及处理过程

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:product.kylinos.cn 开发者专区:developer.kylinos.cn 文档中心:document.kylinos.cn 交流论坛:forum.kylinos.cn 服务器环境以及配置 【内核版本…...

C语言之饭店外卖信息管理系统

🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 C语言之饭店外卖信息管理系统 目录 设计题目设计目的设计任务描述设计要求输入和输出要求验…...

记一次 .NET某数字化协同管理系统 内存暴涨分析

一:背景 1. 讲故事 高级调试训练营里的一位朋友找到我,说他们跑在linux上的.NET程序出现了内存泄露的情况,上windbg观察发现内存都是IMAGE给吃掉了,那些image都标记了 doublemapper__deleted_ 字样,问我为啥会这样&a…...

部门管理查询部门,nginx反向代理,前端如何访问到后端Tomcat 注解@RequestParam

接口开发 增删改通常是不用返回data数据,返回null 列表查询-结果封装,时间 前后端联调测试 nginx反向代理,前端如何访问到后端Tomcat服务器 删除部门...

JS通过ASCII码值实现随机字符串的生成(可指定长度以及解决首位不出现数值)

在之前写过一篇“JS实现随机生成字符串(可指定长度)”,当时写的过于简单和传统,比较粗放。此次针对此问题,对随机生成字符串的功能进行优化处理,对随机取到的字符都通过程序自动来完成。 在写之前&#xff…...

速通Docker === 快速部署Redis主从集群

目录 镜像仓库介绍 持久化你的数据库 连接到其他容器 创建自定义网络 部署主节点 部署从节点 验证部署 总结 在现代应用架构中,Redis作为一个高性能的内存数据库,被广泛应用于缓存、会话存储、实时分析等多个领域。为了提高Redis的可用性和数据的…...

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(一)

Understanding Diffusion Models: A Unified Perspective(一) 文章概括引言:生成模型背景:ELBO、VAE 和分层 VAE证据下界(Evidence Lower Bound)变分自编码器 (Variational Autoencoders&#x…...

stm32使用MDK5.35时遇到*** TOOLS.INI: TOOLCHAIN NOT INSTALLED

mdk5.35出现*** TOOLS.INI: TOOLCHAIN NOT INSTALLED的问题!!!! 以管理员身份重新打开MDK5.35.0.0,用keygen破解密码,但是一直提示我是没有破解成功。 解决办法: target 改成ARM...

在Ubuntu上安装RabbitMQ教程

1、安装erlang 因为rabbitmq是基于erlang开发的,所以要安装rabbitmq,首先需要安装erlang运行环境 apt-get install erlang执行命令查是否安装成功:erl,疯狂 Ctrlc 就能退出命令行 2、安装rabbitmq 1、查看erlang与rabbitmq版本…...

【算法】集合List和队列

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 零:集合,队列的用法 一:字母异位词分组 二:二叉树的锯…...

uniapps使用HTML5的io模块拷贝文件目录

最近在集成sqlite到uniapp的过程中,因为要将sqlite数据库预加载,所以需要使用HTML5的plus.io模块。使用过程中遇到了许多问题,比如文件路径总是解析不到等。尤其是应用私有文档目录’_doc’。 根据官方文档: 为了安全管理应用的…...

css‘s hover VS mobile

.animation {animation: 30s move infinite linear;/* &:hover {animation-play-state: paused;*/ }原本写的好好的,测试说:“移动端点击滚动条,跳转到其他页面后,返回当前页面,滚动条不滚动;可以优化位…...

工业制造离不开的BOM

在制造业的浩瀚星空中,物料清单(BOM)犹如“北极星”,牢牢指引着产品从设计蓝图迈向实物诞生的全过程。 BOM的分类 按照设计制造的不同阶段,将BOM划分为设计BOM、工艺BOM、制造BOM三种类型。 设计BOM Engineering BO…...

HTML中的`<!DOCTYPE html>`是什么意思?

诸神缄默不语-个人CSDN博文目录 在学习HTML时&#xff0c;我们经常会看到HTML文档的开头出现<!DOCTYPE html>&#xff0c;它是HTML文件的第一行。很多初学者可能会疑惑&#xff0c;为什么需要这行代码&#xff1f;它到底有什么作用呢&#xff1f;在这篇文章中&#xff0…...

C语言之斗地主游戏

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 ​ C语言之斗地主游戏 目录 程序概述程序设计 Card类CardGroup类Player类LastCards类Land…...

【玩转全栈】----Django制作部门管理页面

目录 大致效果 BootStrap BootStrap简介 BootStrap配置 BootStrap使用 基本配置 部分代码解释及注意&#xff1a; 用户编辑&#xff1a; 新添数据&#xff1a; 删除数据&#xff1a; 大致效果 我先给个大致效果&#xff0c;基本融合了Django、Bootstrap、css、html等等。 基于D…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...