0

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

から週を w1 w2 などとして計算したいsysdate。例:

  • の為id=1sdate16-04-13に当たるそうですweek1
  • forは 14-04-13id=5sdate該当するため、week2

結果はこのようになるはずです

id  week   offer
1    w1   offer1
5    w2   offer8
.............
4

4 に答える 4

1

今日とその前の 6 日間を「第 1 週」、その前の 7 日間を「第 2 週」、というように扱うには、次のようにします。

SELECT
  id,
  'w' || TO_CHAR(TRUNC((TRUNC(SYSDATE) - sdate) / 7) + 1) as week,
  offer
FROM ... and so on
于 2013-04-22T13:47:02.663 に答える
0

ある日付から別の日付を引くと、日数の差が得られます。週の差を得るには、7 で割ります。floor()残りを取り除くために使用します。W0 ではなく W1 から開始するため、1 を追加します。

select id
        , sdate
        , 'W'||trim(to_char(floor((sysdate - sdate)/7) + 1)) as wkno
from your_table
/

wkno'W1'、'W2'、... 'W10' のように数値でソートされないことに注意してください。それがあなたを悩ませるものであれば、さまざまな回避策があり、オプションよりも明白です。

于 2013-04-22T13:44:14.613 に答える
0

TO_CHAR関数と を組み合わせることができると思います。DECODEたとえば、次のようになります。

sql> select decode(to_char(sdate, 'W'),
                   '1', 'w1',
                   '2', 'w2',
                   '3', 'w3',
                   '4', 'w4',
                   '5', 'w5')
       from table1;
于 2013-04-22T12:18:25.190 に答える