Oracle 查询优化改写(第五章)

这篇具有很好参考价值的文章主要介绍了Oracle 查询优化改写(第五章)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第五章 使用字符串

1.遍历字符串

Oracle 查询优化改写(第五章)

SELECT '天天向上' 内容,level,substr('天天向上', LEVEL, 1) 汉字拆分
  FROM Dual
CONNECT BY LEVEL <= Length('天天向上');

 2.计算字符在字符串中出现的次数

Oracle 查询优化改写(第五章)

 Oracle 查询优化改写(第五章)

 Oracle 查询优化改写(第五章)

3.从字符中删除不需要的字符 

若员工姓名有元音字母AEIOU,现在要求把这写元音字母去掉。

SELECT 'aAbcdef', Translate('abcdef', '1AEIOUaeiou', '1') FROM Dual;
SELECT 'aAbcdef', Regexp_Replace('abcdef', '[AEIOUaeiou]') FROM Dual;

Oracle 查询优化改写(第五章)

 将字符和数字数据分离也可以通过regexp_replace分离:

regexp_replace(data,'[0-9],'')  字符

regexp_replace(data,'[^0-9],'')  数字

Oracle 查询优化改写(第五章)

4.正则表达式 regexp_like

Oracle 查询优化改写(第五章)

 Oracle 查询优化改写(第五章)

4.1^和$的含义

 Oracle 查询优化改写(第五章)

 4.2+和*的含义

Oracle 查询优化改写(第五章)

 Oracle 查询优化改写(第五章)

4.3 ^和$与+和*联合使用

 Oracle 查询优化改写(第五章)

 5.提取姓名的大写字母缩写

 Oracle 查询优化改写(第五章)

 Oracle 查询优化改写(第五章)

 6.按字符串中的数值排序

 Oracle 查询优化改写(第五章)

7. 根据表中的行创建一个分割列表

SELECT Deptno,
       SUM(Sal) AS Total_Sal,
       Listagg(Ename, ',') Within GROUP(ORDER BY Ename) AS Total_Name
  FROM Emp
 GROUP BY Deptno;

Oracle 查询优化改写(第五章)

 8.提取第n个分隔的子串

--function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
--参数二:-^在方括号里表示否的意思,+表示匹配1次以上,[^,]+表示匹配不包含逗号的多个字符。
--参数三:1表示从第一个字符开始。
--参数四:2表示第二个能匹配'[^,]+'的字符串。
--参数五:模式(‘i’不区分大小写进行检索;‘c’区分大小写进行检索。默认为’c’)针对的是正则表达式里字符大小写的匹配
SELECT Regexp_Substr(Total_Name, '[^,]+', 1, 2) AS 第二个子串
  FROM (SELECT Listagg(Ename, ',') Within GROUP(ORDER BY Ename) AS Total_Name
          FROM Emp);

9.分解IP的地址

--分解ip地址192.168.1.1
SELECT Regexp_Substr(Ip, '[^.]+', 1, 1) AS a,
Regexp_Substr(Ip, '[^.]+', 1, 2) AS b,
Regexp_Substr(Ip, '[^.]+', 1, 3) AS c,
Regexp_Substr(Ip, '[^.]+', 1, 4) AS d
  FROM (SELECT '192.168.1.1' AS Ip FROM Dual);

10.将分隔数据转换为多值in列表

Oracle 查询优化改写(第五章)

Oracle 查询优化改写(第五章)

DECLARE
  CURSOR c_Emps(v_Emps VARCHAR2) IS
    SELECT *
      FROM Emp
     WHERE Ename IN
           (SELECT Regexp_Substr(v_Emps, '[^,]+', 1, LEVEL) AS Ename
              FROM Dual
            CONNECT BY LEVEL <=
                       Length(Translate(v_Emps, ',' || v_Emps, ',')) + 1);

  c_Emp_Rec c_Emps%ROWTYPE;
BEGIN
  OPEN c_Emps('&InputString');
  LOOP
    FETCH c_Emps
      INTO c_Emp_Rec;
    EXIT WHEN c_Emps%NOTFOUND;
    Dbms_Output.Put_Line(c_Emp_Rec.Ename);
  END LOOP;

END;

 11.按字母顺序排列字符串

SELECT Ename,
       (SELECT Listagg(Substr(Ename, LEVEL, 1))
           Within GROUP(ORDER BY Substr(Ename, LEVEL, 1))
          FROM Dual
        CONNECT BY LEVEL <= Length(Ename)) AS New_Name
  FROM Emp;

Oracle 查询优化改写(第五章)

SELECT Ename,
       (SELECT Listagg(min(Substr(Ename, LEVEL, 1)))
        Within GROUP(ORDER BY (Substr(Ename, LEVEL, 1)))
          FROM Dual
        CONNECT BY LEVEL <= Length(Ename) 
        GROUP BY Substr(Ename, LEVEL, 1)) AS New_Name
  FROM Emp;

Oracle 查询优化改写(第五章)

 12.判别可作数值的字符串

Oracle 查询优化改写(第五章)

 Oracle 查询优化改写(第五章)

Oracle 查询优化改写(第五章)

 Oracle 查询优化改写(第五章)

 Oracle 查询优化改写(第五章)

Oracle 查询优化改写(第五章) 

Oracle 查询优化改写(第五章)

 文章来源地址https://www.toymoban.com/news/detail-487429.html

 

 

到了这里,关于Oracle 查询优化改写(第五章)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Oracle子查询改写的几种方式

    子查询是嵌套在另一个语句(如SELECT,INSERT,UPDATE或DELETE)中的SELECT语句。 通常,可以在任何使用表达式的地方使用子查询。 比如从以下的病人信息中查询最近一个月住院年龄最大的病人信息 从以上的信息中我们知道病人出生日期BIRTHDATE ,限制取数的时间范围算出年龄 首先我

    2024年02月09日
    浏览(36)
  • 解决Oracle SQL语句性能问题——SQL语句改写(视图、标量子查询及update)

    我们在前述文章中也已经提到,对于高版本的关系库,尤其是针对Oracle这样的关系库,绝大多数场景下,同一语义和结果的SQL语句的具体语法,不会成为SQL语句执行计划的影响因素,但在少数场景下,针对同一语义和结果的SQL语句的不同写法,数据库优化器最终会分别为其生

    2024年02月10日
    浏览(40)
  • 【MySQL新手到通关】第五章 多表查询

    多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个 关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”

    2024年02月07日
    浏览(23)
  • GreatSQL 优化技巧:将 MINUS 改写为标量子查询

    minus 指令运用在两个 SQL 语句上,取两个语句查询结果集的差集。它先找出第一个 SQL 所产生的结果,然后看这些结果有没有在第二个 SQL 的结果中,如果在,那这些数据就被去除,不会在最后的结果中出现,第二个 SQL 结果集比第一个SQL结果集多的数据也会被抛弃。 这两天的

    2024年04月08日
    浏览(28)
  • Java 新手如何使用Spring MVC 中的查询字符串和查询参数

    目录 前言   什么是查询字符串和查询参数? Spring MVC中的查询参数  处理可选参数 处理多个值 处理查询参数的默认值 处理查询字符串 示例:创建一个RESTful服务  总结 作者简介:  懒大王敲代码,计算机专业应届生 今天给大家聊聊Java 新手如何使用Spring MVC 中的查询字符串

    2024年02月03日
    浏览(35)
  • 【C语言】深入精讲字符串处理函数使用与优化

    目录 一、字符串处理函数 1、测量字符串的长度 strlen 2、字符串拷贝函数 strcpy/strncpy(拷贝前n个字符)  3、字符串追加函数strcat/strncat 4、字符串比较函数strcmp  5、字符查找函数strchr/strrchr  6、字符串查找strstr 7、字符串替换函数memset 8、字符串 切割 strtok  二、字符串转数值

    2024年02月17日
    浏览(39)
  • 第五期:字符串的一些有意思的操作

    PS:每道题解题方法不唯一,欢迎讨论!每道题后都有解析帮助你分析做题,答案在最下面,关注博主每天持续更新。 1. 替换空格 题目描述 请实现一个函数,把字符串 s 中的每个空格替换成\\\"%20\\\"。 示例1: 输入:s = “We are happy.” 输出:“We%20are%20happy.” 示例2: 输入:s =

    2024年02月08日
    浏览(34)
  • LeetCode 75 第五题(345)反转字符串中的元音字母

    给一个字符串,将里面的元音字母反转,并且保持非元音字母不变(包括顺序). 字符串反转类型的题,我们都可以使用双指针来解决:定义首尾指针,分别向中间靠拢,直到首尾指针都指向了元音字母,然后交换首尾指针所指的字母,如此不会影响到非元音字母,同时也将元音字母反转了

    2024年02月16日
    浏览(45)
  • Oracle——SUBSTR()截取字符串,INSTR()查找字符串

    使用语法:SUBSTR( string , start , [length]) string :需要截取的字符串。 start :  起始位置, -3 表示从倒数第三个字符开始, 从左往右 截取。 length:截取长度(默认截取到末尾)。 使用语法:INSTR( string , str , [start],[which]) string :源字符串。 str :查找的子字符串(可以

    2024年02月12日
    浏览(33)
  • Oracle解析JSON字符串

    假设某个字段存储的JSON字符串,我们不想查出来后通过一些常见的编程语言处理( JSON.parse() 或者是 JSONObject.parseObject() 等),想直接在数据库上处理,又该如何书写呢? 其实在 ORACLE 中也支持多种机制去处理JSON数据,例如有操作函数JSON_ARRAY、JSON_EXISTS、JSON_VALUES、JSON_TABLE、

    2024年02月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包