南昌电影网站开发,谷歌推广电话,网站上传完成后要怎么做,中国建设银行官网站e路护下载目录 前言1. TRANSLATE2. REGEXP_LIKE3. 实战 前言 #x1f91f; 找工作#xff0c;来万码优才#xff1a;#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 1. TRANSLATE
TRANSLATE 用于替换字符串中指定字符集的每个字符#xff0c;返回替换后的字符串
逐一映射输入字… 目录 前言1. TRANSLATE2. REGEXP_LIKE3. 实战 前言 找工作来万码优才 #小程序://万码优才/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(userexample.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 TRUEELSE FALSEEND AS CONTAINS_ALPHA
FROM DUAL;
-- 输出: TRUE检查复杂模式如邮箱格式
-- 示例 3: 验证是否为邮箱格式
SELECT CASE WHEN REGEXP_LIKE(userexample.com, ^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$) THEN TRUEELSE FALSEEND AS IS_EMAIL
FROM DUAL;
-- 输出: TRUE忽略大小写匹配
-- 示例 4: 区分大小写和忽略大小写
SELECT CASE WHEN REGEXP_LIKE(Oracle, ^oracle$, i) THEN TRUEELSE FALSEEND 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 (多个空格)不计入计入 通过TRIMabc123不计入不计入000计入计入123456不计入不计入
如果 DEVICE_ID 存在空格或特殊字符REGEXP_LIKE 会更精确 如果 DEVICE_ID 仅考虑数字部分TRANSLATE 会更宽松一些