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 个按钮,它提供高数据采集速度,出色的兼容性,…...

【银河麒麟高级服务器操作系统】业务访问慢网卡丢包现象分析及处理过程
了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区: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实现随机生成字符串(可指定长度)”,当时写的过于简单和传统,比较粗放。此次针对此问题,对随机生成字符串的功能进行优化处理,对随机取到的字符都通过程序自动来完成。 在写之前ÿ…...

速通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时,我们经常会看到HTML文档的开头出现<!DOCTYPE html>,它是HTML文件的第一行。很多初学者可能会疑惑,为什么需要这行代码?它到底有什么作用呢?在这篇文章中࿰…...

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

【玩转全栈】----Django制作部门管理页面
目录 大致效果 BootStrap BootStrap简介 BootStrap配置 BootStrap使用 基本配置 部分代码解释及注意: 用户编辑: 新添数据: 删除数据: 大致效果 我先给个大致效果,基本融合了Django、Bootstrap、css、html等等。 基于D…...

Unreal Engine 5 C++ Advanced Action RPG 十章笔记
第十章 Survival Game Mode 2-Game Mode Test Map 设置游戏规则进行游戏玩法 生成敌人玩家是否死亡敌人死亡是否需要刷出更多 肯定:难度增加否定:玩家胜利 流程 新的游戏模式类游戏状态新的数据表来指定总共有多少波敌人生成逻辑UI告诉当前玩家的敌人波数 3-Survival Game M…...

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证9)
测试数据库中只有之前记录温湿度及烟雾值的表中数据较多,在该数据库中增加AppUser表,用于登录用户身份查询,数据库表如下所示: 项目中安装SqlSugarCore包,然后修改控制器类的登录函数及分页查询数据函数ÿ…...

缓存之美:万文详解 Caffeine 实现原理(上)
由于社区最大字数限制,本文章将分为两篇,第二篇文章为缓存之美:万文详解 Caffeine 实现原理(下) 大家好,我是 方圆。文章将采用“总-分-总”的结构对配置固定大小元素驱逐策略的 Caffeine 缓存进行介绍&…...

Spark/Kafka
文章目录 项目地址一、Spark1. RDD1.1 五大核心属性1.2 执行原理1.3 四种创建方式二、Kafka2.1 生产者(1)分区器(2)生产者提高吞吐量(3) 生产者数据可靠性数据传递语义幂等性和事务数据有序2.2 Broker(1)Broker工作流程(2)节点服役和退役2.3 副本(1)Follower故障细…...

深入浅出:Go语言中的Unicode与字符编码详解
深入浅出:Go语言中的Unicode与字符编码详解 引言 在当今的编程世界中,字符编码和Unicode是不可或缺的技术基础。Go语言作为一种强大的编程语言,其对Unicode的支持和字符编码的处理方式,对于开发者来说至关重要。本文将从Unicode的基础知识入手,逐步深入探讨Go语言中字符编…...

什么是SSL及SSL的工作流程
什么是 SSL SSL(Secure Sockets Layer,安全套接层)是一种保护互联网通信安全的加密协议,用于确保数据在客户端和服务器之间传输时的保密性、完整性和身份验证。它已被TLS(Transport Layer Security,传输层安全协议)取代,但很多场景仍习惯称其为SSL。 SSL/TLS 的主要目…...

.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...

AD7606, 逐次逼近型ADC以及一次被GPT坑了的过程.
首先, 我的项目中, 已有的一个ADC芯片, 8通道, 并行, Analog家的ad7606, 在采集高速的正弦信号的时候, 我发现采集到的值怎么都不太对. 但是宏观来看, 并没有太大问题, 首先我怀疑的是量程问题, 接入一个5伏直流, 得到的读数确实是接近16bit的正半量程的读数, 32xxx. 接着我用信…...

抬手、放手识别算法
在一款智能手表中, 平时手表处于息屏的状态, 用于节省功耗,延长使用时间。 在用户进行抬手的时候,其实是希望能够及时看一下时间、消息通知等信息的。这时手表应该能够检测到用户的抬手动作,自动进行屏幕的点亮。当用户…...

深度学习篇---AnacondaLabelImg
文章目录 前言第一部分:Anaconda是什么?1.简介2.特点(1)包管理器Conda(2)环境管理(3)预装包(4)跨平台(5)社区支持 3.安装WindowsLinux…...