【发布时间】:2016-03-12 17:47:44
【问题描述】:
我需要从 EMPLOYEES 表中获取一些数据,并根据 hire_date 创建带有星期名称的新列。然后必须按星期几(从星期一到星期日)对结果进行排序,这就是我的问题所在。
我决定使用解码功能,但似乎我做错了什么。
这是我的查询
SELECT FIRST_NAME, LAST_NAME, HIRE_DATE, TO_CHAR(HIRE_DATE, 'DAY', 'NLS_DATE_LANGUAGE=ENGLISH') AS DAY_OF_WEEK FROM EMPLOYEES ORDER BY DECODE(DAY_OF_WEEK,'MONDAY',1,'TUESDAY',2,'WEDNESDAY',3,'THURSDAY',4,'FRIDAY',5,'SATURDAY',6,'SUNDAY',7)
一切正常,除了排序。周三开始,其余时间随机。
我稍微改变了查询,所以我可以看到这个函数是如何工作的。
SELECT FIRST_NAME, LAST_NAME, HIRE_DATE, TO_CHAR(HIRE_DATE, 'DAY', 'NLS_DATE_LANGUAGE=ENGLISH') AS DAY_OF_WEEK, DECODE(TO_CHAR(HIRE_DATE, 'D', 'NLS_DATE_LANGUAGE=ENGLISH'), 'MONDAY',1, 'TUESDAY',2, 'WEDNESDAY',3, 'THURSDAY',4, 'FRIDAY',5, 'SATURDAY',6, 'SUNDAY',7) AS DAY2 FROM EMPLOYEES ORDER BY DECODE(DAY_OF_WEEK, 'MONDAY',1, 'TUESDAY',2, 'WEDNESDAY',3, 'THURSDAY',4, 'FRIDAY',5, 'SATURDAY',6, 'SUNDAY',7)
在 DAY2 列中返回类似这样的内容,周三为 3 号,其他所有内容为 (null)。
这就解释了为什么排序不起作用,但我仍然不知道为什么它不起作用以及查询中的错误在哪里:)
【问题讨论】: