在oracle找一个月的周数

时间:2012-10-31 10:36:31

标签: sql oracle date-arithmetic

我有桌子,我已经存储了所有星期一,例如(第一个八月,八月八日,十五月十八日,十二月二十八日,二十九日),我需要找出那个月的那个星期,就像第一个八月一样,它将是1, 8月8日和之后..对于Sept计数器应该再次从1开始。这可以通过sql查询完成,数据库是oracle 10g吗?

如果每个月的第一个星期三到来,那个月的第一个星期一应该标记为1,它的第二周但需要为1。

3 个答案:

答案 0 :(得分:8)

select to_char(your_date,'W') from dual;

会这样做。

一个很好的分析表是here

这是a SQL Fiddle to prove it

答案 1 :(得分:2)

查询中需要进行小的更改,请检查2014年6月1日,它显示为第一周= 2.使用以下查询进行检查。同样的情况适用于2017年1月1日

选择 to_date(' 06/01 / 2014',' mm / dd / yyyy')curr_day, next_day(trunc(to_date(' 06/01 / 2014',' mm / dd / yyyy'),' mm') - 8,' sun& #39;)prev_week, trunc((to_date(' 06/01 / 2014',' mm / dd / yyyy') - next_day(trunc(to_date)' 06/01 / 2014' ,' mm / dd / yyyy'),' mm') - 8,' sun')/ 7)+1"周" 来自双重;

正确的查询应为:

选择 to_date(' 06/01 / 2014',' mm / dd / yyyy')curr_day, next_day(trunc(to_date(' 06/01 / 2014',' mm / dd / yyyy'),' mm') - 7,' sun& #39;)prev_week, trunc((to_date(' 06/01 / 2014',' mm / dd / yyyy') - next_day(trunc(to_date)' 06/01 / 2014' ,' mm / dd / yyyy'),' mm') - 7,' sun')/ 7)+1"周" 来自双重;

答案 2 :(得分:1)

来源http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:7482139067917

select 
x,
next_day(trunc(x,'mm')-8, 'sun'),
trunc( (x-next_day(trunc(x,'mm')-8, 'sun'))/7 )+1 "week"
from t;

周从周一'MON'开始

您可以查看SQL Fiddle