Как узнать дату по году, месяцу, дню и месячному номеру недели? - PullRequest
1 голос
/ 03 ноября 2011

у меня

Year : 2011
Month: Nov
Day: Sun
WeekNumber(Monthwise): 4

Желаемая продукция:

Date
--------
2011-11-20

Как я могу сделать это в одном операторе SQL?

Спасибо

Ответы [ 3 ]

4 голосов
/ 03 ноября 2011

Я бы, вероятно, посмотрел на использование функции NEXT_DAY, которая возвращает первый день дня недели при условии, что это происходит после указанной даты.Получив это, вы можете добавить необходимое количество недель.

Примером этого может быть:

with test_data as (
  select
    '2011' as the_year,
    'Nov' as the_month,
    'Sun' as the_day,
    4 as the_week
  from dual
)
select 
  the_year, the_month, the_day, the_week,
  next_day(to_date(the_year||the_month, 'YYYYMON') - 1, the_day) + 
    7* (the_week -1) as the_date
from test_data
1 голос
/ 03 ноября 2011

это может сработать.

SELECT NEXT_DAY( TO_DATE(TO_CHAR((4-1)*7) || '-' || 'NOV' || '-' || '2011','dd-mon-yyyy') ,'Sun') 
FROM DUAL

см .: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions093.htm

0 голосов
/ 03 ноября 2011

попробуй:

SELECT A.B + B.D YourDate 
FROM (SELECT TO_DATE (Your4DigitYear || LPAD ( YourMonth, 2, '0' ) || LPAD ( DECODE (YourWeekOfMonth, 1, '1', (YourWeekOfMonth - 1) * 7 ), 2, '0' ), 'YYYYMMDD') B FROM DUAL) A, (SELECT LEVEL - 1 D FROM DUAL CONNECT BY LEVEL < 15) B WHERE 
TO_CHAR (A.B + B.D, 'D' ) = YourDayOfWeek AND 
TO_CHAR (A.B + B.D, 'W' ) = YourWeekOfMonth;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...