我正在编写一个查询 Oracle APEX 的查询,该查询列出了 2016 年即将到来的学生生日列表,并按时间顺序排列。这有效,我使用了以下代码:
SELECT first_name, last_name, to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy') AS birthday
FROM students
WHERE date_of_birth IS NOT NULL
ORDER BY birthday
这给出了正确的输出,并开始显示 2016 年按时间顺序排列的生日名称。
但是,我现在想获得另一个专栏,显示学生在课堂上庆祝生日的那一天。因此,对于在工作日生日为同一天的学生,但对于在周末生日为周一的学生,使用案例陈述将“周六”或“周日”更改为“周一”。
我已经做了一个查询,显示学生的生日是在哪一天庆祝的,它给出了正确的输出,如“星期五”或“星期三”,代码是:
SELECT first_name, last_name, to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy') AS birthday, to_char(to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy'), 'day') AS celebrationday
FROM students
WHERE date_of_birth IS NOT NULL
ORDER BY birthday
我已经用 case 语句做了一些简单的测试,比如当名字是 'John' 时添加一些东西,像这样:
SELECT student_number, first_name,
(CASE first_name
WHEN 'John' THEN 'Check'
END) addition
FROM Students
这导致了正确的输出;对于除 'John' 以外的所有名称,列添加将为 null,并且具有该名称的名称将在列添加中具有 'Check' 。
现在,主要问题开始于当我尝试复制它以检查庆祝日是否在周末时,我收到以下错误: 'ORA-00904 'celebrationday': invalid identifier',对于这段代码:
SELECT first_name, last_name, to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy') AS birthday, to_char(to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy'), 'day') AS celebrationday,
(CASE celebrationday
WHEN 'saturday' THEN 'monday'
WHEN 'sunday' THEN 'monday'
END) addition
FROM students
WHERE date_of_birth IS NOT NULL
ORDER BY birthday
(很少评论,我知道该案例还应该包含一周中的其他日子,但起初我有兴趣从周末获得适当的输出)
或者对于下面的一段代码,我只是没有在列添加中得到任何结果,只是空值。
SELECT first_name, last_name, to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy') AS birthday,
CASE to_char(to_date(concat(to_char(date_of_birth, 'dd-mm'), '-2016'), 'dd-mm-yyyy'), 'day)
WHEN 'saturday' THEN 'monday'
WHEN 'sunday' THEN 'monday'
END) addition
FROM Students
WHERE date_of_birth IS NOT NULL
ORDER BY date_of_birth
- 我需要做什么才能使案例陈述生效,以便我可以更改庆祝日?我希望提供的代码示例足够清晰,可以使用,并让您了解什么是有效的,什么是无效的。