2015-04-16 4 views
1

Это то, что я до сих пор:SQL случай оракул когда дата

select 
to_char(sysdate, 'yyyy') Time 
from 
dual; 

Который дает мне:

TIME 

2015 

Сво работать до этого момента.

Я хотел бы добавить

  • если месяц >= 7 я получаю в качестве выходного сигнала 01.07.current year
  • если месяц <= 7 я получаю в качестве выходного сигнала 01.07.(current year - 1 year)

Любые идеи, как справиться с этим ? Я думал о CASE WHEN, но я не знаю, как это сделать.

Спасибо!

ответ

2

Простой CASE выражение будет выполнять эту работу.

Например,

SQL> SELECT 
    2 '01.07.' || 
    3 CASE 
    4  WHEN TO_CHAR(SYSDATE, 'MM') < '07' 
    5  THEN 
    6  TO_CHAR(SYSDATE, 'YYYY') 
    7  ELSE 
    8  TO_CHAR(add_months(SYSDATE,-12), 'YYYY') 
    9 END case_date 
    10 FROM dual; 

CASE_DATE 
---------- 
01.07.2015 

SQL> 

Чтобы сохранить его еще более точным, вы можете сохранить общее значение вне выражения случай:

SQL> SELECT '01.07.' 
    2 || 
    3 CASE 
    4  WHEN TO_CHAR(SYSDATE, 'MM') < '07' 
    5  THEN TO_CHAR(SYSDATE, 'YYYY') 
    6  ELSE TO_CHAR(add_months(SYSDATE,-12), 'YYYY') 
    7 END case_date 
    8 FROM dual; 

CASE_DATE 
---------- 
01.07.2015 

SQL> 
+0

Спасибо ! Это очень помогло мне! Perfect – piguy

+0

@piguy Пожалуйста, отметьте, что он ответил. –

+0

@Okdel Спасибо за предложение на редактирование. Поскольку из части объяснения было потеряно содержание, я должен сам его улучшить. Итак, я принял ваше редактирование и улучшил его. –

1

Использование экстракта более читаемым

SELECT 
to_date((CASE 
      WHEN extract(MONTH FROM SYSDATE) >= 7 THEN 
       0 
      ELSE 
       -1 
     END) + extract(YEAR FROM SYSDATE) || '07-01', 'yyyy-mm-dd') END 
    FROM dual 
Смежные вопросы