根据学期和年份查看

时间:2017-06-13 06:53:43

标签: sql oracle sql-view

我有一个包含字段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

但我不知道如何分开这些年来并根据这一年与学期联系。 有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

简单的案例陈述将解决您的问题。

  • Sem1:Month< = 04
  • Sem2:Month> 04和月< = 08
  • Sem3:Else

记住这一点。

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;

答案 1 :(得分:0)

我不会写整个功能,但你可以使用DECODE:

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

您可以使用CASE和&lt;。

更有效地编写它