1.确定两个日期之间的工作日天数 --确定两个日期之间的工作日天数with x0 as (select to_date('2018-01-01','yyyy-mm-dd') as 日期 from dual union all select to_date('2018-01-15','yyyy-mm-dd') as 日期 from dual ), x1 as --日期并列显示 (select min (日期) 开始日期,max(日期) 结束日期 from x0 ), x2 as --日期之间的天数…
with aa as ( select 'sad10' as data from dual union all select 'datf20' as data from dual union all select 'java30' as data from dual ) select regexp_replace(data,'[0-9]','') as english, regexp_replace(data,'[^0-9]','') as num from aa     ENGLISH    …
原文地址:http://www.agiledata.org/essays/keys.html 本文概述关系数据库中为表指定主键的策略.主要关注于何时使用自然键或者代理键的问题.有些人会告诉你应该总是使用自然键,而另外一些人会告诉你应该总是使用代理键.这些人总是被证明是错误的,通常他们仅仅是与你分享了他们"数据信仰"的偏见.事实上自然键与代理键具有各自的优缺点,没有在所有情况下都完美的策略.也就是说,你必须清楚你要做的事情才能做好它.本文讨论以下内容: 常用的术语 选择键的策略 代理键实…
开窗函数:在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成.为了解决这些问题,在 2003 年 ISO SQL 标准加入了开窗函数,开窗函数的使用使得这些经典的难题可以被轻松的解决.目前在 MSSQLServer.Oracle.DB2 等主流数据库中都提供了对开窗函数的支持,不过非常遗憾的是 MYSQL 暂时还未对开窗函数给予支持. 开窗函数简介:与聚合函数一样,开窗函数也是对行集组进行聚合计算,但是它不像普通聚合函数那样每组只返回一个值…
一.    物化视图概述 Oracle的物化视图是包括一个查询结果的数据库对像,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果.物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高查询性能:物化视图对应用透明,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性:物化视图需要占用存储…
关于这一点一直就是很懵懂的状态,今天特意网上查了一下资料,以下摘抄网上比较好的答案.以作记录. 普通视图和物化视图的区别答曰:普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,首先明白基本概念,普通视图是不存储任何数据的,他只有定义,在查询中是转换为对应的定义SQL去查询,而物化视图是将数据转换为一个表,实际存储着数据,这样查询数据,就不用关联一大堆表,如果表很大的话,会在临时表空间内做大量的操作.普通视图的三个特征:1.是简化设计,清晰编码的东西,他并不是提高性能的,他的存在只会降…
/*语法*/ lag(exp_str,offset,defval) over() Lead(exp_str,offset,defval) over() --exp_str要取的列 --offset取偏移后的第几行数据 --defval:没有符合条件的默认值 with x0 as (select '1'as aa ,to_date('2018-01-01','yyyy-mm-dd') as 日期 from dual union all select '2' as aa,to_date('2018-…
SYSDATE 2009-6-16 15:25:10 TRUNC(SYSDATE) 2009-6-16 TO_CHAR(SYSDATE,'YYYYMMDD') 20090616 到日 TO_CHAR(SYSDATE,'YYYYMMDD HH24:MI:SS') 20090616 15:25:10 到秒 TO_CHAR(SYSTIMESTAMP,'YYYYMMDD HH24:MI:SS.FF3') 20090616 15:25:10.848 到毫秒 TO_CHAR(SYSDATE,'AD') 公元…
需求:一串字母'ADFGH',需要按照顺序来显示:A D F G H 第一步:先把字符串拆分 with test as( select 'ADFGH' as a from dual ) select a ,substr(a,level,1) from test connect by level<=length(a) 第二步:用listagg拼接 with test as( select 'ADFGH' as a from dual ) select a ,(select listagg(subs…
今天遇到一个问题,not in 查询失效,我以为是穿越了,仔细查了点资料,原来理解有误! select value from temp_a a where a.id between 1 and 100 and not exists(select * from temp_b b where a.value=b.value); 这时能查出结果 select value from temp_a a where a.id between 1 and 100 and a.value not in(sele…