`

oracle的周、月份、日历

阅读更多

oracle的周、月份、日历

1、周

/* 关键在于当年第一周的第一天和最后一天怎么算,后面只需加上7天就是一周,类推

--还有就是确定的是,一年总共只有53周

--Oracle中周日为第一天 ,周六为最后一天 */

SELECT LEVEL 周次,

(Trunc(SYSDATE,'yyyy')-7) + (7-To_Char(Trunc(SYSDATE,'yyyy'),'d')+1) + (LEVEL-1)*7 当周第一天,

(Trunc(SYSDATE,'yyyy')-7) + (7-To_Char(Trunc(SYSDATE,'yyyy'),'d')+1) + (LEVEL-1)*7+6 当周最后一天

FROM dual

CONNECT BY LEVEL<=53;

2、月份

--当年每个月的起止时间

select aa as monNum, to_date(mon,'yyyymmdd') as firstDay,LAST_DAY(to_date(mon,'yyyymmdd')) as lastDay

from (

select to_char(sysdate,'yyyy')||to_char(aa,'09')||'01' mon ,aa

from (

select 1 aa from dual union

select 2 aa from dual union

select 3 aa from dual union

select 4 aa from dual union

select 5 aa from dual union

select 6 aa from dual union

select 7 aa from dual union

select 8 aa from dual union

select 9 aa from dual union

select 10 aa from dual union

select 11 aa from dual union

select 12 aa from dual

)

);

3、日历

--from:http://www.itpub.net/469543.html

select case

when (new_yweek = min(new_yweek)

over(partition by mon order by new_yweek)) then

mon_name

else

null

end as month,

new_yweek as yweek,

row_number() over(partition by mon order by new_yweek) as mweek,

sum(decode(wday, '1', mday, null)) as sun,

sum(decode(wday, '2', mday, null)) as mon,

sum(decode(wday, '3', mday, null)) as tue,

sum(decode(wday, '4', mday, null)) as wed,

sum(decode(wday, '5', mday, null)) as thu,

sum(decode(wday, '6', mday, null)) as fri,

sum(decode(wday, '7', mday, null)) as sat

from (select dayofyear as everyday,

to_char(dayofyear, 'mm') as mon,

to_char(dayofyear, 'Month') as mon_name,

to_char(dayofyear, 'w') as mweek,

to_char(dayofyear, 'ww') as yweek,

case

when (to_char(to_date(&year || '0101', 'yyyymmdd'), 'd') > '1') and

(to_char(dayofyear, 'd') < to_char(to_date(&year || '0101', 'yyyymmdd'), 'd'))

then

to_char(to_char(dayofyear, 'ww') + 1, 'fm00')

else

to_char(dayofyear, 'ww')

end as new_yweek,

to_char(dayofyear, 'd') as wday,

to_char(dayofyear, 'dd') as mday

from (select to_date(&year || '0101', 'yyyymmdd') + level - 1 as dayofyear

from dual

connect by level <= to_char(to_date(&year || '1231', 'yyyymmdd'),'ddd')))

group by mon, mon_name, new_yweek



4、应用

--每周的上报情况 ,由于跨年情况存在,故在第几周前加年份缀,如 [2010]-7 ;

select weekNumCur, sum(上报数) from (

select eventID ,上报数,'['||to_char(createtime,'yyyy')||']-'||to_number(to_char(createtime,'ww')) as weekNumCur , createtime

from statuser.tostat

where createtime between to_date('2010-12-01','yyyy-mm-dd') and to_date('2011-01-10','yyyy-mm-dd')+1 )

group by weekNumCur

order by weekNumCur;

--------------------

时间(周)上报数

[2010]-50 1

[2010]-51 16

[2010]-52 2

[2011]-1 6

分享到:
评论

相关推荐

    oracle函数得到下一个法定工作日期

    首先,Oracle提供了一些内置的日期函数,如`SYSDATE`获取当前日期,`ADD_MONTHS`增加月份,`TRUNC`截断日期到指定的日期部分。然而,这些函数并不直接支持判断是否为工作日或法定假日。因此,我们通常需要结合其他...

    Oracle的SQL实现日期的功能

    标签“源码 工具”可能暗示这篇博文也会介绍一些实用的SQL脚本或工具,比如`oracle日历.sql`可能是一个包含示例查询或自定义函数的脚本,用于展示如何在Oracle中处理日期和时间。这些工具或脚本可以极大地提高开发...

    我自己做的一个最简单的java日历程序,可供朋友们学习参考!

    3. **显示月份日历**:为了显示一个月的日历,我们需要知道每个月的第一天是星期几。`Calendar`类的`getFirstDayOfWeek()`方法可以获取此信息,`getActualMaximum(Calendar.DAY_OF_MONTH)`则返回该月的最大天数。 4...

    在Oracle和MySQL中利用SQL查询出今年日历

    在Oracle和MySQL数据库中,利用SQL查询今年的日历是一项常见的任务,这可以帮助我们更好地管理和展示时间数据。在本文中,我们将深入探讨如何在两种数据库系统中实现这一目标,并理解涉及的关键SQL概念。 首先,让...

    Java Swing 编写的日历程序

    例如,为了展示一个月的日历,开发者可能创建多个`JPanel`,每个面板代表一周,然后在每个面板上放置表示日期的`JButton`。 `JButton`是Swing中的交互组件,用于用户点击操作。在这里,每个按钮将代表日期,可以...

    考试日历指南

    根据给定的“考试日历指南”文件,我们可以总结出以下关键知识点: ### CGFNS考试(美国护士考试) - **考试频率**:每年举办3次。 - **考试时间**:分别在每年的3月、7月和11月举行。 - **全球同步**:全世界所有...

Global site tag (gtag.js) - Google Analytics