最近使用arcplan做报表,遇到不同日期粒度下展示数据的需求,利用sql直接从数据库中查询更为简便,且复用性强,记录下。
年粒度情况:展示当年前推5年的数据。
t.d_day>= add_months(to_date('2012'||'0101', 'yyyymmdd'),-60)
and t.d_day<= last_day(to_date('2012'||'1201', 'yyyymmdd'))
半年粒度情况:展示当前半年前推12个数据点。
d_day>=add_months(to_date(substr('2011H2', 1, 4)||decode(substr('2011H2', 6, 6),1,'0101',2,'0701'), 'yyyymmdd') ,-72)
and t3.d_day<=to_date(substr('2011H2', 1, 4)||decode(substr('2011H2', 6, 6),1,'0630',2,'1231'), 'yyyymmdd')
季粒度情况:展示当前季度前推12个数据点。
t.d_day>=add_months(to_date(substr('2012Q1', 1, 4)||decode(substr('2012Q1', 6, 6),1,'0101',2,'0401',3,'0701',4,'1001'), 'yyyymmdd') ,-36)
and t.d_day<=to_date(substr('2012Q1', 1, 4)||decode(substr('2012Q1', 6, 6),1,'0101',2,'0401',3,'0701',4,'1001'), 'yyyymmdd')
月粒度情况:展示当前年所在12个月的数据,不足12个月前推。
t.d_day<=last_day(to_date('201204
', 'yyyymm')) and t.d_day>add_months(last_day(to_date('201204', 'yyyymm')),-12)
旬粒度情况:展示当年季度前推12个点的数据。
t.d_day>= to_date(to_char(add_months(to_date(substr('201201X3', 1, 6), 'yyyymm'), -ceil(11 / 3) ), 'YYYYMM')||decode( to_char(
case when to_number(substr('201201X3', 8, 1)) - mod(11, 3) > 0 THEN to_number(substr('201201X3', 8, 1)) - mod(11, 3)
else to_number(substr('201201X3', 8, 1)) - mod(11, 3) + 3 END),1,'01',2,'11',3,'21'),'yyyymmdd')
and t.d_day<= decode(substr('201201X3', 8, 8),1,to_date(substr('201201X3', 1, 6)||'10','yyyymmdd'),2,to_date(substr('201201X3', 1, 6)||'20','yyyymmdd'),3,last_day(to_date(substr('201201X3', 1, 6)||'01','yyyymmdd')))
周粒度情况:展示当年周前12个数据点。
t.d_day<= trunc(to_date(substr('2011W53', 1, 4) || '01' || '01', 'yyyymmdd'), 'IW') + 7 * to_number(substr('2011W53', 6, 2)) - 1
and t.d_day> trunc(to_date(substr('2011W53', 1, 4) || '01' || '01', 'yyyymmdd'), 'IW') + 7 * to_number(substr('2011W53', 6, 2)) - 1 - 12 * 7
日粒度情况:展示当前月30天,不足30天前推30天。
t.d_day<=to_date('20120326
', 'yyyymmdd') and t.d_day>(to_date('20120326', 'yyyymmdd')-30)
分享到:
相关推荐
Oracle 约束错误约束错误Oracle 约束错误约束错误
Oracle没有datetime类型,只有date类型,date类型可以同时用作日期时间类型。这里对Oracle日期时间类型做一下简单的介绍
Oracle中的日期处理总结Oracle中的日期处理总结Oracle中的日期处理总结Oracle中的日期处理总结Oracle中的日期处理总结Oracle中的日期处理总结
Oracle 中关于时间和日期的函数,好记性不如烂笔头
ORACLE日期时间函数大全
oracle约束详解.oracle约束详解.oracle约束详解.oracle约束详解.
里面有字符是否符时间期的两个函数,一个纯日期,还有一个加了时分秒。经测试可以用的
Oracle时间日期操作
简单的oracle 时间比较函数,自己在网上找到并加以整理出来。
在oracle中处理日期大全 不熟悉Oracle中日期处理的可以学习一下哦!
它是在 Oracle8i 中推出的,已经受到广泛的欢迎,并且在从教育软件到金融服务等各种应用程序得到采用。VPD 的工作方法是,通过透明地更改对数据的请求,基于一系列定义的标准向用户提供表的局部视图。在运行时,所有...
Oracle 验证是否是日期,帮助你验证给定的字符串是否可以转化为日期。
Oracle关于时间/日期的操作 日期的函数 很适合初学者 格式挺多种的
oracle中日期类型与unix 时间戳的转换, Unix时间戳记是从'1970-01-01 00:00:00'GMT开始的秒数,表现为整数型。 Oracle中的时间是Date型,以下函数提供了两种时间转换的Oracle函数 --unix时间戳与date时间互转 ...
oracle中涉及到的日期、时间所有函数
oracle 日期时间操作,oracle 日期时间
select sysdate from dual 等等一些关于oracle的查询当前时间,日期的一些sql语句的
ORACLE 日期和时间处理汇总,各种日期时间函数,有实例供参考!