oracle函数

oracle根据特定字符拆分字符串的方法

倖福魔咒の 提交于 2020-02-17 07:49:59
清洗数据需要将某个字段内以空格分隔的字符串拆分成多行单个的字符串,百度了很多种方法大概归结起来也就这几种方法最为有效,现在把贴出来: 第一种: select regexp_substr('1 2 3','[^ ]+',1,level,'i') from dual connect by level <= length('1 2 3') -length(regexp_replace('1 2 3',' ',''))+1; 效果就是这个样子↓ 效果 这种方法的核心就是 regexp_subst r函数,通过正则来拆分字符串,函数用法为: regexp_substr(str, 进行匹配的正则表达式,position, 标志第几个匹配组,modifier) 。 该函数的一个缺点就是只能每次取一个字符串出来,这个就比较头痛了,因为现在我要取分割后所有的字符串,所以现在就要用到 connect by 命令,来限制取几个匹配组,当然我们是要全部的,所以就通过 length 来实时确定所取得匹配组数量。 通过这种方法就可以实现开题的需求,但在用的过程中发现一个问题,如果说我要给拆分后的字符串带上ID的话这种方法就貌似失灵了,会无限次取,所以问题没解决,有人知道的话麻烦可以告诉我一下。 第二种 1 create or replace function split(p_list varchar,p

Oracle实现行转列的几种思路

让人想犯罪 __ 提交于 2020-02-16 14:17:16
1.说明 这里主要介绍三种行转列的方式,其中方式一为传统的方式实现行转列,在这一节中我们分别介绍行转列中值为求个数、数字以及字符串三种方式;方式二主要借助11g新增加的函数pivot实现;方式三利用pivot和xml解决了方式二中硬编码的缺陷。 2.环境准备 2.1数据库版本 oracle版本:11g.2.0.4_x64 2.2 数据库初始化脚本 --创建数据表 create table stu(id int,name varchar2(20),course varchar(20),score int,lev varchar(5)); --插入数据 insert into stu(id,name,course,score,lev) select 1,'张三','语文',90,'优' from dual union select 2,'张三','数学',80,'良' from dual union select 3,'张三','英语',70,'中' from dual union select 4,'李四','语文',60,'差' from dual union select 5,'李四','数学',91,'优' from dual union select 6,'李四','英语',81,'良' from dual union select 7,'王五','语文',71,'中'

ORACLE隐式类型转换

不问归期 提交于 2020-02-16 14:12:22
隐式类型转换简介 通常 ORACLE 数据库存在显式类型转换( Explicit Datatype Conversion ) 和隐式类型转换( Implicit Datatype Conversion )两种类型转换方式。如果进行比较或运算的两个值的数据类型不同时(源数据的类型与目标数据的类型),而且此时又没有转换函数时,那么 ORACLE 必须将其中一个值进行类型转换,使其能够运算。这就是所谓的隐式类型转换。其中隐式类型转换是自动进行的,当然,只有在这种转换是有意义的时候,才会自动进行。 Data Conversion Generally an expression cannot contain values of different datatypes. For example, an expression cannot multiply 5 by 10 and then add 'JAMES'. However, Oracle supports both implicit and explicit conversion of values from one datatype to another. 关于隐式类型转换,建议翻看官方文档 “ Data Type Comparison Rules ” 章节,下面是官方文档中的隐式类型转换矩阵。从下面这个表格

oracle提高查询效率的34条方法

帅比萌擦擦* 提交于 2020-02-15 09:36:04
oracle提高查询效率的34条方法 1、选择最有效率的表名顺序   (只在基于规则的优化器中有效):   ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. 2、WHERE子句中的连接顺序   ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. 3、SELECT子句中避免使用 " * "   ORACLE在解析的过程中, 会将"*" 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间 4、减少访问数据库的次数   ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率, 绑定变量 , 读数据块等; 5、在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数   可以增加每次数据库访问的检索数据量 ,建议值为200 6、使用DECODE函数来减少处理时间  

Oracle中的chr()函数和asicc()函数 - 笔记

我的未来我决定 提交于 2020-02-14 08:26:32
(一)写在前面 因为一些原因,在跨入编程界N年以后的脱离仪式上,还是没能脱离代码。辗转了Java及Android,不得不饮恨放弃。专项了web前端,也是不了了之。痛定思痛,在“学”和“用”两个方面考虑,最终还是选定了Oracle为代表的数据库。还是那句话,我们每个人,在时间的某个节点,总会遇上一些不得不的,选择或被选择。 离别时只道是当时习惯 / 一切都很平淡不觉出彩 / 雨落时才想起那种心安 / 欢声和笑语还在我耳畔 / 如今已各自在城市两端 / 相距远相见难不聚只散 / 其实我并没有太多期盼 / 毕竟一生很短少有圆满 / ------------------------------------------------------------分割线--------------------------------------------------------------------- (二)用到语句 遇到一个select语句,贴出如下: select chr(54740) zhao,chr(65) chr from dual; 输出结果如下: ZH C -- - 赵 A (三)语句分析 此处用到chr()函数,把ASCII整数值,转换成对应的字符的操作。翻译一下这个语句:“从dual表中查询‘54740’和‘65’两个ASCII码对应的字符,表头设为‘zhao’和‘chr’” 1

1 Oracle概述&与MySQL的差别&SQL语句分类复习

与世无争的帅哥 提交于 2020-02-14 00:06:33
一、 知识点目录 Oracle的概念和安装 基本查询 条件查询 Oracle中的函数 多表查询 子查询 表空间的状态 用户 视图 索引 序列 同义词 PLSQL编程 游标 存储过程 存储函数 触发器 二、Oracle MySQL:开源免费,中小型企业。淘宝网用MySQL集群 Oracle:收费,国企、金融、银行,证券,保险。京东用Oracle。 按CPU核数,一核=永久使用费用 18万 三、Oracle体系结构 数据库:文件系统(相当于Java中的类) 数据库实例:实例。通常情况下Oracle数据库只会有一个实例ORCL 表空间:表空间可以创建用户,用户可以创建表。逻辑单位 数据文件:物理单位 新建一个项目: MySQL:新建一个数据库,然后新建表 Oracle:创建一个表空间,创建用户,用户去创建表 Oracle是多用户的,MySQL是多数据库的 四、Oracle和MySQL的差别: 二者皆遵循SQL标准,SQL语句类似,但是有各自的方言 使用自己的方言也能够完成相同的功能 Oracle安全性能较好,MySQL开源免费 五、 SQL:结构化查询语言 DDL : 数据定义语言 create alter drop truncate DML: 数据操纵语言 insert update delete DCL: 数据控制语言 安全 授权 grant revoke DQL: 数据查询语言

Oracle中NVL函数的用法详解

限于喜欢 提交于 2020-02-12 20:45:39
NVL函数可以用在 判断列值是否为空 的情况。 1. 如果列值不为空,则返回列值本身的值 2. 如果列值为空,则返回该函数中第二个参数的值 函数语法:NVL(参数1,参数2) 举个简单的例子: 列出emp表中comm列值不为空的员工姓名,SQL实现如下: select ename from emp where nvl(comm,0)>0; 首先,我们通过以下sql先看一下nvl函数的返回值情况: select ename,nvl(comm,0) from emp; 通过上面实例,可以看出为空的comm列值返回值为0 所以我们可以通过返回值大于0的条件来取出comm不为空的员工。 当然了,不为空的条件也可以用 is not null 来实现: select ename from emp where comm is not null; 来源: CSDN 作者: 我是一名程序猿 链接: https://blog.csdn.net/baidu_35901646/article/details/104283515

Oracle数据库自带表或者视图

醉酒当歌 提交于 2020-02-10 21:26:00
dba_开头 dba_users 数据库用户信息 dba_segments 表段信息 dba_extents 数据区信息 dba_objects 数据库对象信息 dba_tablespaces 数据库表空间信息 dba_data_files 数据文件设置信息 dba_temp_files 临时数据文件信息 dba_rollback_segs 回滚段信息 dba_ts_quotas 用户表空间配额信息 dba_free_space 数据库空闲空间信息 dba_profiles 数据库用户资源限制信息 dba_sys_privs 用户的系统权限信息 dba_tab_privs 用户具有的对象权限信息 dba_col_privs 用户具有的列对象权限信息 dba_role_privs 用户具有的角色信息 dba_audit_trail 审计跟踪记录信息 dba_stmt_audit_opts 审计设置信息 dba_audit_object 对象审计结果信息 dba_audit_session 会话审计结果信息 dba_indexes 用户模式的索引信息 user_开头 user_objects 用户对象信息 user_source 数据库用户的所有资源对象信息 user_segments 用户的表段信息 user_tables 用户的表对象信息 user_tab_columns

简单oracle 查询语句 转换为 mongo 查询语句

徘徊边缘 提交于 2020-02-10 18:18:45
可以将简单的单表查询语句转换成Mongo过滤条件 列: 1、 SELECT score,person as name FROM demo WHERE person like '%z' and score between 80 and 100 db.demo.aggregate([ {"$match": {"$and": [{"person": {"$regex": "^.*z$", "$options": "i"}}, {"score": {"$gte": 80, "$lte": 100}}]}} , {"$project": {"score": "$score", "name": "$person", "_id": 0}} ]) 2、 SELECT * FROM demo WHERE score < 90 and person is not null or (score >= 90 and person <> 'zsa') or person in ('tyh','jhh') db.demo.find( {"$or": [{"$and": [{"score": {"$lt": 90}}, {"person": {"$exists": true}}]}, {"$and": [{"score": {"$gte": 90}}, {"person": {"$ne": "zsa"}}]},

《精通Oracle SQL(第2版)》PDF

浪子不回头ぞ 提交于 2020-02-10 09:47:00
一:下载途径 二:图书图样 三:目录 第1章 SQL核心  1.1 SQL语言  1.2 数据库的接口  1.3 SQL*Plus回顾  1.3.1 连接到数据库  1.3.2 配置SQL*Plus环境  1.3.3 执行命令  1.4 5个核心的SQL语句  1.5 SELECT语句  1.5.1 FROM子句  1.5.2 WHERE子句  1.5.3 GROUP BY子句  1.5.4 HAVING子句  1.5.5 SELECT列表  1.5.6 ORDER BY子句  1.6 INSERT语句  1.6.1 单表插入  1.6.2 多表插入  1.7 UPDATE语句  1.8 DELETE语句  1.9 MERGE语句  1.10 小结  第2章 SQL执行  2.1 Oracle架构基础  2.2 SGA共享池  2.3 库高速缓存  2.4 完全相同的语句  2.5 SGA缓冲区缓存  2.6 查询转换  2.6.1 查询块  2.6.2 视图合并  2.6.3 子查询解嵌套  2.6.4 联结消除  2.6.5 排序消除  2.6.6 谓词推进  2.6.7 使用物化视图进行查询重写  2.7 确定执行计划  2.8 执行计划并取得数据行  2.9 SQL执行——总览  2.10 小结  第3章 访问和联结方法  3.1 全扫描访问方法  3.1.1