2017-06-13 12 views
1

私は、フィールド "BEGDATE"を含む表を持っています。これはvarchar2で、値は "20170405142030"です。私は2つのフィールドを含むビューを作成しようとしています。 最初のフィールドは年です(例:2017).2番目のフィールドは学期です。学期は月に基づいています。学年と年を基準にした表示

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

が、私は何年区切ると年に基づい学期に関連するかどうかはわからない:

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. 

私は今のところ、この単純なクエリを持っています。 助けてください?

+0

おそらく、[Trimester](https://en.wikipedia.org/wiki/Trimester)と呼ぶほうがよいでしょう。 –

答えて

1

簡単な場合の声明があなたの問題を解決します。

  • 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使用することができます:あなたはCASEと<を使用して、より効率的にそれを書くことができます

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

を。

関連する問題