Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 查询中的周计算_Oracle_Plsql_Date Arithmetic - Fatal编程技术网

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

使用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   offer1
5    w2   offer8
.............
我想从
sysdate
计算周数为w1 w2,依此类推。 例如:

  • 对于
    id=1
    sdate
    在2013年4月16日,因此是
    week1
  • 对于
    id=5
    sdate
    在14-04-13,所以是
    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”?