2017-06-13 87 views
1

我有一個表,其中包含一個字段BEGDATE,這是一個varchar2幷包含值,如「20170405142030」。我試圖創建一個包含兩個字段的視圖。 第一個領域是一年(例如:2017),第二個領域是學期。該學期是以月份爲基礎的。查看基於學期和年份

when the month is : 01 or 02 or 03 or 04 --> then semester contains value:sem1 
when the month is : 05 or 06 or 07 or 08 --> then semester contains value:sem2 
when the month is : 09 or 10 or 11 or 12 --> then semester contains value:sem3. 

我有這個簡單的查詢現在:

CREATE VIEW V_EMP AS 
    SELECT SUBSTR(BEGDATE, 1, 4) AS ANNEE,SUBSTR(BEGDATE, 5, 2) 
    FROM EMP 

,但我不知道如何單獨多年,並涉及基礎上,今年的學期。 請幫忙嗎?

+0

也許你應該更好地稱它[三個月](https://en.wikipedia.org/wiki/Trimester) –

回答

1

一個簡單的case語句將解決您的問題。

  • SEM1:月< = 04
  • Sem2:月> 04和月< = 08
  • Sem3:否則

牢記這一點。

SELECT SUBSTR (begdate, 1, 4) AS YEAR, 
     CASE 
      WHEN SUBSTR (begdate, 5, 2) <= 4 
      THEN 'Sem1' 
      WHEN SUBSTR (begdate, 5, 2) <= 8 
      THEN 'Sem2' 
      ELSE 'Sem3' 
     END sem 
    FROM emp; 
0

我不會寫的全功能,但你可以使用DECODE:

SELECT DECODE (SUBSTR(BEGDATE, 5, 2), '01', 'SEM1', 
       SUBSTR(BEGDATE, 5, 2), '05', 'SEM2', 
       etc.) 

可以使用CASE和<更有效地寫。