--创建用户
CREATE USER jim IDENTIFIED BY changeit;--给用户赋登陆连接权限
GRANT CONNECT TO jim;--给用户赋资源权限
GRANT RESOURCE TO jim;--回收登陆权限
REVOKE CONNECT FROM jim;--回收资源操作权限
REVOKE RESOURCE FROM jim;--锁定用户
ALTER USER jim ACCOUNT LOCK;--给用户解锁
ALTER USER jim ACCOUNT UNLOCK;--给用户修改密码
ALTER USER jim IDENTIFIED BY changeit;--创建时间维度表
CREATE TABLE DIM_DATE(Date_ID char(8) primary key , --20160704Date_Name date,  --2016/7/4Year number,    --2016Year_Half char(6), --2016H2Year_Month char(6),  --201607Year_Quarter char(6),-- 2016Q3Half_Number number,--2Half_Name char(2), --H2Quarter_Number number,--3Quarter_Name char(2),--Q3Month_Number number,--7Month_Name nvarchar2(20),--JUNLWeek_Number number, --2Week_Name nvarchar2(20),--MondayCreat_Date date,   --创建时间Update_Date date) --更新时间
    ;--测试选出一段时间select to_date('2014-01-01','YYYY-MM-DD')+(rownum-1) from dual connect by rownum<=(to_date('2015-01-01','YYYY-MM-DD')-to_date('2014-01-01','YYYY-MM-DD'));with temp_date as (select to_date('2014-01-01','YYYY-MM-DD')+(rownum-1) from dual connect by rownum<=(to_date('2015-01-01','YYYY-MM-DD')-to_date('2014-01-01','YYYY-MM-DD')))select * from temp_date;--创建存储过程,导入时间CREATE OR REPLACE PROCEDURE SP_ADD_DATEASv_Half number;v_Quarter number;v_Month DIM_Date.Month_Name%type;v_Month_Number number;CURSOR c_date ISSELECT Date_ID,DIM_Date.Date_Name FROM DIM_DATE;c_row c_date%rowtype;BEGINMERGE INTO DIM_DATE T1USING(select to_date('2014-01-01','YYYY-MM-DD')+(rownum-1) date_name from dual connect by rownum<=(to_date('2018-01-01','YYYY-MM-DD')-to_date('2014-01-01','YYYY-MM-DD')) ) temp_Dateon (t1.date_name=temp_Date.date_name)when matched thenupdate set t1.date_id=to_char(temp_Date.date_name,'YYYYMMDD')when not matched theninsert (Date_ID) values(to_char(temp_Date.date_name,'YYYYMMDD'));--循环游标FOR c_row in c_date loopv_Month_Number:=to_number(to_char(c_row.Date_Name,'MM'));if v_Month_Number>6 thenv_Half:=2;elsev_Half:=1;end if;update DIM_DATE setDIM_DATE.DATE_NAME=to_date(c_row.Date_ID,'YYYY-MM-DD'),DIM_DATE.HALF_NAME='H'||v_Half   --后面在这里补充where  DIM_DATE.DATE_ID=c_row.Date_ID;end loop;END;

 /*******************华丽的分割线********************/--创建地域维度表CREATE TABLE DIM_Geo(M_CNTY_ID number primary key,M_CNTY nvarchar2(20),  --县M_CITY nvarchar2(20), --市M_PRVNC nvarchar2(20)--省
   );--创建销售事实表CREATE TABLE SALES_FACT(EMPNO NUMBER(4),DATE_ID char(8),CITY_ID NUMBER,SALES NUMBER);--基于多列的联合主键--此处为empno,date_ID, city_ID共同为一个主键alter table SALES_FACT add constraint PK_SALES_FACT PRIMARY KEY (EMPNO,DATE_ID,CITY_ID);--查询出事实表WITH v1 as (select * from SALES_FACT),v2 as (select * from EMP),v3 as (select * from DIM_DATE),v9 as (select * from DIM_Geo),v6 as (select distinct sales_fact.city_id from sales_fact),v4 as(SELECT v2.ename,v1.date_id,v1.city_id,v1.sales FROM v1 right join v2 on  v2.empno=v1.empno),v5 as (select v4.ename,v3.date_id,v4.city_id,v4.sales from v4 partition by (v4.ename)right join v3 on v3.date_id=v4.date_id),v7 as (select v5.ename,v5.date_id,v6.city_id,v5.sales from v5 partition by (ename,date_id)right join v6 on v6.city_id=v5.city_id),v8 as (select v7.ename,v3.Date_ID,v3.Date_Name,v3.Quarter_Name,v3.Quarter_Number,v3.Month_Number,v3.MONTH_NAME,v3.Week_Name,v7.city_id,v7.sales from v7 left join v3on v7.date_id=v3.date_id  group by v7.ename,v3.Date_ID,v3.Date_Name,v3.Quarter_Name,v3.Quarter_Number,v3.MONTH_NAME,v3.Month_Number,v3.Week_Name,v7.city_id,v7.sales order by v7.ename,v3.Quarter_Name,v3.Week_Name)select ename,month_name,v9.M_CNTY,v9.M_CITY,v9.M_PRVNC,sum(sales) from v8left join v9 on v8.city_id=v9.M_CNTY_ID WHERE ENAME='ADAMS' GROUP BY ename,month_name,v9.M_CNTY,v9.M_CITY,v9.M_PRVNC ORDER BY MONTH_NAME,M_CNTY ;

Oracle中几个类似集合的用法

union all:将多个选择结果取并集,并且包含重复部分

unional:将

intersect:

minus:

Oracle拆分字段

如有下数据:我们需要将表格1中的数据形式转换成表格2的形式(也就是将老师这个字段拆成单行)

表1                                                                                                                                                                      表2

姓名 学科 老师
Jim 语文 张三 李四 王五
Jim 数学 牛儿 
Jim 英语 迈克尔 梁山伯
Lucy 语文 老五 李四
姓名 学科 老师
Jim 语文 张三
Jim 语文 李四
Jim 语文 王五
Jim 数学 牛儿
Jim 英语 麦克尔
Jim 英语 梁山伯
Lucy 语文 老五
Lucy 语文 李四

此处的核心问题就是:需要将一条数据拆成多条数据

在解决这个问题之前,我们先来看看一个例子

regexp_substr函数的使用方法:

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)

String :需要进行正则处理的字符串

__pattern    :进行匹配的正则表达式
__position   :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier   :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
connect by 函数
select regexp_substr('ABCD EF G','[^ ]+',1,level,'c') from dual
connect by regexp_substr('ABCD EF G','[^ ]+',1,level,'c') is not null ;

这时候,我们得到的结果是:

同样的道理,我们来实现一开始的问题,先创建这么一张关系表:

CREATE TABLE t (student nvarchar2(20),subject nvarchar2(10),teacher nvarchar2(100)
);INSERT INTO t VALUES('Jim','语文','张三 李四 王五');
INSERT INTO t VALUES('Jim','数学','牛儿');
INSERT INTO t VALUES('Jim','英语','迈克尔 梁山伯');
INSERT INTO t VALUES('Lucy','语文','老五 李四');

接下来,我们实现对teacher这个字段进行拆分,teacher中的每个值是按照空格分开的。

我们实现的代码是这样的:

select student,subject,regexp_substr(teacher,'[^ ]+',1,level) from t
group by student,subject , teacher,level
connect by regexp_substr(teacher,'[^ ]+',1,level) is not null order by 1;

最终结果:

此外,我们还有另外一种方法可以来解决这个问题,前提是我们需要把所有的teacher找出来做一个临时表,

利用like方法以及左连接来拆分

select t.student,t.subject,teacherRecord.teacher
from t left outer join teacherRecord
on t.teacher like '%' || teacherRecord.teacher || '%'

最终结果:

orcle数据库表导出csv文件

废话少说,直接来代码:

set colsep ,
set feedback off
set heading off
set trimout on
spool D:\DBoracle\lfc.csv
select '"' || yyyymm || '","' || yyyymmdd || '","' ||  bu_cd || '"from jim_CALL;
spool off
exit

  

转载于:https://www.cnblogs.com/Jims2016/p/5640138.html

Oracle基本函数即字段拆分相关推荐

  1. oracle拆分字段为多行,一句话实现字段拆分成多行

    把表中某字段根据分隔符拆分成N个字符串后,再用这N个字符串把这一行演变成N行. 用SQL来解决这个问题非常烦琐! SQL里没有提供集合对象,不能提供根据拆分后的字符串集合把一行变成多行的操作.解决这个 ...

  2. oracle 表字段拆分,oracle 字段拆分

    场景:Oracle 字段拆分有关问题 Oracle 字段拆分问题 我现在有一个字段是存:1,2,3的,而它对应另一张值集表中.eg; 课程人员表 id    name     Course 1     ...

  3. count 多个字段_一句话实现字段拆分成多行

    把表中某字段根据分隔符拆分成N个字符串后,再用这N个字符串把这一行演变成N行. 用SQL来解决这个问题非常烦琐! SQL里没有提供集合对象,不能提供根据拆分后的字符串集合把一行变成多行的操作.解决这个 ...

  4. oracle判断非空并拼接,oracle sql 判断字段非空,数据不重复,插入多跳数据

     oracle sql 判断字段非空,数据不重复 select distinct(mobile) from wx_user_mobile where active_time is not null ...

  5. oracle字符串清洗、拆分案例

    oracle字符串清洗.拆分案例 需求描述 需求: 对给定的字符,按照点号对其进行拆分并以表的形式返回结果. 解决方法:通过 translate,结合自定义自增表.SUBSTR来实现字符串拆分. SQ ...

  6. kettle——入门操作-行列转换(行转列,字段拆分)

    1.Row Normaliser,将一行多列数据转换为多行一列数据. 输入数据流: 计算器配置如下: 与计算器相连接的excel输出如下: Row Normaliser,设置如下, 与Row Norm ...

  7. clob类型用java怎么存,Java 储存和读取 oracle CLOB 类型字段的实用方法

    当前位置:我的异常网» 编程 » Java 储存和读取 oracle CLOB 类型字段的实用方法 Java 储存和读取 oracle CLOB 类型字段的实用方法 www.myexceptions. ...

  8. mysql clob转string_Java获取Oracle中CLOB字段转换成String

    Java获取Oracle中CLOB字段转换成String : try {PreparedStatement stmt = session.connection().prepareStatement(s ...

  9. 读取oracle bfile字段,ORACLE中BFILE字段的使用研究_oracle

    因为做项目,需要使用BFILE字段存储图像文件,所以进行了一些研究. bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对 oracle来说是只读的,也不参与事务性控制和 ...

  10. oracle unused用法,set unused的用法(ORACLE刪除字段)

    set unused的用法(ORACLE刪除字段) 一.問題 現場有一張大數據量的分區表,數據量在10G以上.因某種原因需要刪除其中的某些字段.如果直接用 alter table1 drop (col ...

最新文章

  1. 本科生顶刊发封面文章!他,是能成就导师的学生
  2. Codeforces 1103
  3. Oracle apex 搭建
  4. REST 在 Java 中的使用
  5. .net core word转pdf_免费在线转换PDF转Word、Word转PDF,办公必备神器
  6. html文本分类输出,构建中文网页分类器对网页进行文本分类
  7. kingate是一位国人开发的代理服务器
  8. linux查看某个端口的流量_Linux下如何对端口流量进行统计
  9. python des加密文件_python DES3 加密解密
  10. 关于FLEX中找不到目标对象或通道未定义错误
  11. 机器学习基石 作业0
  12. 暨南大学人文社科a类期刊_暨南大学人文社会科学重要期刊目录分类
  13. SQL编程-辣椒菠萝
  14. win10系统下删除文件夹失败,提示“找不到该项目”
  15. Windows下linux传盘工具,Windows下安装红旗Linux及工具盘全过程
  16. java api微盘_新浪微盘的API Python版封装
  17. My 2007 Fash game: Elite Shooter
  18. 滤色,颜色减淡,正片叠底
  19. 名帖315 沈尹默 行书《兰亭序》书轴
  20. win10 计算机管理器没有ime,win10电脑任务栏输入法初选ime禁用的解决方法

热门文章

  1. JavaScript 闭包(个人理解)
  2. 如何成为一名好的程序员的一些个人经验
  3. 2014上海全国邀请赛 解题报告
  4. 如何使一个你没有源代码的DLL文件变为强命名的DLL
  5. ubuntu安装配置ssmtp
  6. Exchange 2010 迁移至Exchange 2013系列之一:系列架构介绍
  7. MS SQL修改数据库名称
  8. centos下valgrind的安装与使用
  9. 19n20c的参数_FQB19N20CTM
  10. 复制粘贴之后出现问号怎么办_网页没办法复制粘贴?老司机传授这3招太赞了,全网任意免费复制...