查看基于学期和年份

View based on semesters and year

我有一个 table,它包含一个 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

但我不确定如何根据年份区分年份和关联学期。 有什么帮助吗?

我不打算编写整个函数,但您可以使用 DECODE:

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

您可以使用 CASE 和 <.

更有效地编写它

一个简单的 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;