[Oracle]面试官:你举例几个内置函数,并且说说如何使用内置函数作正则匹配

简介: 本文介绍了多种SQL内置函数,包括单行函数、非空判断函数、日期函数和正则表达式相关函数。每种函数都有详细的参数说明和使用示例,帮助读者更好地理解和应用这些函数。文章强调了字符串操作、数值处理、日期计算和正则表达式的使用方法,并提供了丰富的示例代码。作者建议读者通过自测来巩固学习成果。

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://developer.aliyun.com/article/1634560
出自【进步*于辰的博客

先言

字符串前有一个' '(空字符),故首字母的位置是1,不是0(下文“开始位置”)。

1、单行函数

参考笔记一,P15.3、P39.1。

摘要 参数说明 返回值类型/返回值 说明
substr(str, pos[, len]) pos-开始位置,可为负值 截取。截取方向始终向右
round(a, b) b-精确位数 四舍五入。若b < 0,则向左精确,故round(a)等价于round(a, 0)
upper(str) 转大写
lower(str) 转小写
initcap(str) 首字母大写
length(str) 返回长度
concat(a, b) 拼接,类似`\ \ `
trunc(a, b) b-精确位数 数值取整(以10为整)
sysdate 获取系统时间
instr(str1, str2[, pos][, n]) str2-查找字符,pos-开始位置,n-第几个 位置 查找,找不到返回0。其中,instr(str1, str2)等价于instr(str1, str2, 1, 1)
lpad/rpad(str1, len, str2) 左 / 右填充。表示将str1str2向左 / 向右填充成长度为len的字符串
replace(str1, str2, str3) 替换。表示将str1中的str2str3替换
trim(str) 去除前后空格
trim(leading/trailing/both/无 a from b) 去除 b 中开头 / 结尾 / 开头和结尾 / 开头以及结尾的 a
mod(a, b) 等同于a%b,余数符号跟 a

1.1 lpad/rpad(str1, n, str2)

示例。

select lpad(rpad('csdn', 7, '#'), 10, '*') result from dual

结果:
在这里插入图片描述
n < s1.length,则无论lpad/rpad(),结果都只显示s1的前n个字符(从左往右)。

1.2 instr(str1, str2[, pos][, n])

示例。

select instr(s1, s2, -2, 3) from dual;

表示在str1中,从倒数第2个开始,向左查找第3str2的位置。:无论a的正负,返回的都是绝对位置。

2、非空判断函数

参考笔记一,P18.1。

摘要 参数说明 返回值类型 / 返回值 说明
nvl(a, b) anull,返回 b,否则返回 a
nvl2(a, b, c) a不为null,返回 b,否则返回 c
nullif(a, b) 比较 a、b,若a = b,返回null,否则返回 a
case xx when w1 then c1 when w2 then c2 else c3 end xx = w1w1true,返回 c1;若xx = w2w2true,返回 c2;否则返回 c3
decode(xx, w1, c1, w2, c2, c3) 作用同case()

3、日期函数

参考笔记一,P15.5。

摘要 参数说明 返回值类型 / 返回值 说明
months_between(d1, d2) 返回d1d2相差的自然月数
add_months(d, n) 增加月数
next_day(d, '星期一') 返回 d 后的第1个星期一
last_day(d) 返回 d 当月的最后1天
round(d, 'dd') day四舍五入。'dd'是格式码,其他格式码:'CC'→ 世纪,'YY'→ 年,'mm'→ 月,'hh24'→ 小时,'mi'→ 分钟,'ss'→ 秒。其中,round(d, 'dd')等价于round(d)
trunc(d, 'dd') round()trunc(d, 'dd')等价于trunc(d)
extract(day from d) 获取 d 的天数。day是标识符,表示“天”。其他标识符:'year'→ 年,'month'→ 月,

4、正则表达式相关函数

参考笔记三,P55.1。

摘要 参数说明 返回值类型 / 返回值 说明
regexp_like(a, pattern) boolean 类似like,判断是否包含匹配模式pattern的字符串,故仅能用于进行判断的位置,如:wherecheck()
regexp_substr(a, pattern, pos, n) n-第几个 类似substr()
regexp_instr(a, pattern, pos, n) 位置 类似instr()
regexp_count(a, pattern) 统计匹配模式的字符串个数
regexp_replace(a, pattern, str3) str3-用于替换的字符串 类似replace()

注:

  1. 一般将正则表达式称为“模式”。
  2. 以下函数的参数列表是“必须”部分,考虑到实用性,一些可选参数未列举出。如果大家有兴趣,需另行查找。
  3. 以下“模式”函数与相应单行函数功能相同,可参照上文【单行函数】学习。
  4. 出于篇幅考虑,以下函数的示例数据来源于下文【视图-示例】,不便之处请谅解。
  5. 如果大家不了解“模式”,可查阅博文《正则表达式全解析+常用示例》(转发);若要深入了解,可查阅Pattern类中的【正则表达式的构造摘要】。

    4.1 regexp_like(a, pattern)

    示例:
    select * from v where regexp_like(data, '#');
    
    结果:
    在这里插入图片描述

    4.2 regexp_substr(a, pattern, pos, n)

    示例:
    select regexp_substr(data,'\d',1,1) as r11 from v;
    select regexp_substr(data,'\d',1,2) as r12 from v;
    select regexp_substr(data,'\d',1,3) as r13 from v;
    select regexp_substr(data,'\d',2,1) as r21 from v;
    select regexp_substr(data,'\d',2,2) as r22 from v;
    select regexp_substr(data,'\d',2,3) as r23 from v;
    select regexp_substr(data,'\d',3,1) as r31 from v;
    select regexp_substr(data,'\d',3,2) as r32 from v;
    select regexp_substr(data,'\d',3,3) as r33 from v;
    
    结果:
    在这里插入图片描述

    4.3 regexp_instr(a, pattern, pos, n)

    示例:
    select regexp_instr(data,'\d',1,1) as r11 from v;
    select regexp_instr(data,'\d',1,2) as r12 from v;
    select regexp_instr(data,'\d',1,3) as r13 from v;
    select regexp_instr(data,'\d',2,1) as r21 from v;
    select regexp_instr(data,'\d',2,2) as r22 from v;
    select regexp_instr(data,'\d',2,3) as r23 from v;
    select regexp_instr(data,'\d',3,1) as r31 from v;
    select regexp_instr(data,'\d',3,2) as r32 from v;
    select regexp_instr(data,'\d',3,3) as r33 from v;
    
    结果:
    在这里插入图片描述

    4.4 regexp_count(a, pattern)

    示例:
    select regexp_count(data, '\d') as count from v;
    
    结果:
    在这里插入图片描述

    4.5 regexp_replace(a, pattern, str3)

    示例:
    select regexp_replace(data, '\d','?') as result from v;
    
    结果:
    在这里插入图片描述

    最后

    掌握内置函数,我建议:自测。

本文持续更新中。。。

相关文章
|
13天前
|
SQL 移动开发 Oracle
[Oracle]面试官:你说说rownum、currval与nextval分别是什么,还有没有其他的?
本文主要介绍了 Oracle 数据库中的 `rownum` 虚拟字段和 `nextval`、`currval` 伪列。`rownum` 用于生成结果集的序号,常用于 `top-n` 查询。`nextval` 和 `currval` 基于序列,分别表示序列的下一个值和当前值,常用于主键的自动填充。文中提供了详细的示例和注意事项,帮助读者更好地理解和使用这些功能。
34 1
[Oracle]面试官:你说说rownum、currval与nextval分别是什么,还有没有其他的?
|
14天前
|
存储 SQL Oracle
[Oracle]面试官:你简单说说常用的4种约束
本文介绍了数据库表中的几种常见约束,包括主键、唯一键、外键、检查和非空约束。详细说明了每种约束的创建、删除及启用/禁用方法,特别强调了外键约束的级联操作和检查约束的正则表达式应用。建议多练习手写SQL命令以加深理解。
29 2
|
4月前
|
SQL Oracle 算法
|
3月前
|
机器学习/深度学习
【机器学习】如何判断函数凸或非凸?(面试回答)
文章介绍了如何判断函数是凸函数还是非凸函数,包括凸函数的定义、几何意义、判定方法(一元函数通过二阶导数判断,多元函数通过Hessian矩阵的正定性判断),以及凸优化的概念和一些经典的凸优化问题。
170 1
【机器学习】如何判断函数凸或非凸?(面试回答)
|
3月前
|
JavaScript
【Vue面试题八】、为什么data属性是一个函数而不是一个对象?
这篇文章解释了为什么在Vue中组件的`data`属性必须是一个函数而不是一个对象。原因在于组件可能会有多个实例,如果`data`是一个对象,那么这些实例将会共享同一个`data`对象,导致数据污染。而当`data`是一个函数时,每次创建组件实例都会返回一个新的`data`对象,从而确保了数据的隔离。文章通过示例和源码分析,展示了Vue初始化`data`的过程和组件选项合并的原理,最终得出结论:根实例的`data`可以是对象或函数,而组件实例的`data`必须为函数。
【Vue面试题八】、为什么data属性是一个函数而不是一个对象?
|
4月前
|
安全 Android开发 Kotlin
Android经典面试题之Kotlin中常见作用域函数
**Kotlin作用域函数概览**: `let`, `run`, `with`, `apply`, `also`. `let`安全调用并返回结果; `run`在上下文中执行代码并返回结果; `with`执行代码块,返回结果; `apply`配置对象后返回自身; `also`附加操作后返回自身
59 8
|
4月前
|
SQL Oracle 关系型数据库
|
4月前
|
SQL Oracle 关系型数据库
Oracle|内置函数之INSTR
【7月更文挑战第5天】
|
3月前
|
安全 编译器 C++
【剑指offer】2.2编程语言(p22-p25)——面试题1:string赋值运算函数
【剑指offer】2.2编程语言(p22-p25)——面试题1:string赋值运算函数
|
4月前
|
Oracle 关系型数据库 数据挖掘

推荐镜像

更多