使用oracle数据库和表格就像这样
id sdate offer
1 16-04-13 offer1
2 11-04-13 offer2
3 21-04-13 offer4
4 31-03-13 offer5
5 14-04-13 offer8
6 10-04-13 offer4
7 15-04-13 offer1
我想从sysdate
计算周数为w1 w2,依此类推。
例如:
id=1
,sdate
属于16-04-13,因此为week1
。id=5
,sdate
属于14-04-13,因此week2
结果应该是这样的
id week offer
1 w1 offer1
5 w2 offer8
.............
答案 0 :(得分:1)
将今天和之前的六天视为“第1周”,然后将其作为“第2周”之前的七天,等等,尝试这样的事情:
SELECT
id,
'w' || TO_CHAR(TRUNC((TRUNC(SYSDATE) - sdate) / 7) + 1) as week,
offer
FROM ... and so on
答案 1 :(得分:1)
你也有一个格式。 来自OTN
select to_char( date '2008-01-04', 'IW' ) from dual
答案 2 :(得分:0)
我认为您可以将功能TO_CHAR
和DECODE
结合起来,例如:
sql> select decode(to_char(sdate, 'W'),
'1', 'w1',
'2', 'w2',
'3', 'w3',
'4', 'w4',
'5', 'w5')
from table1;
答案 3 :(得分:0)
一个日期减去另一个日期会给出它们的天数差异。除以七来得到几周的差异。使用floor()
删除剩余部分。添加1因为你想从W1而不是W0开始。
select id
, sdate
, 'W'||trim(to_char(floor((sysdate - sdate)/7) + 1)) as wkno
from your_table
/
请注意,wkno
表示为'W1','W2',...'W10',不会按数字排序。有各种各样的解决方法,比起选择者更明显,如果那是一个让你感到满意的东西。