Oracle 查询中的周计算
使用oracle数据库和表是这样的Oracle 查询中的周计算,oracle,plsql,date-arithmetic,Oracle,Plsql,Date Arithmetic,使用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 id week offer 1 w1
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
id week offer
1 w1 offer1
5 w2 offer8
.............
我想从sysdate
计算周数为w1 w2,依此类推。
例如:
- 对于
,id=1
在2013年4月16日,因此是sdate
week1
- 对于
,id=5
在14-04-13,所以是sdate
week2
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
id week offer
1 w1 offer1
5 w2 offer8
.............
我认为您可以将这些功能结合起来,例如:
sql> select decode(to_char(sdate, 'W'),
'1', 'w1',
'2', 'w2',
'3', 'w3',
'4', 'w4',
'5', 'w5')
from table1;
一个日期减去另一个日期的差值以天为单位。除以7得到周内的差值。使用
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'不会进行数字排序。有各种各样的解决办法,如果这是你们双方都感兴趣的话,那么比选择更明显 要将今天和之前的六天视为“第一周”,然后将之前的七天视为“第二周”,诸如此类,请尝试以下方法:
SELECT
id,
'w' || TO_CHAR(TRUNC((TRUNC(SYSDATE) - sdate) / 7) + 1) as week,
offer
FROM ... and so on
你也有一个格式。
从
4月14日是星期日,您希望将其视为4月16日星期二之前的一周。你的一周从周一到周日吗?另外,只是为了验证:您是否希望“本周”为“第1周”、“上周”为“第2周”、“两周前”为“第3周”,等等?没有日期概念…只想从系统日期中减去7天,我的i:e week1。。所以从表1中选择“w”到“w”?