-1

我一直在努力解决这个问题几个小时。我的数字大约有一年的时间。有人可以告诉我我做错了什么吗?

以下是问题和预期结果: 在此处输入图像描述 从区号 203 创建一个学生姓名列表以及他们注册后的年数(所有值显示 2 个小数位)。按年数从高到低对列表进行排序。

这是我的代码和结果:

SELECT First_Name,
       Last_Name,
       TO_CHAR((ROUND(SYSDATE - registration_date) / 365), '9.99') AS YEARS
FROM Student
WHERE Phone LIKE '203-%%%-%%%%' 
ORDER BY  Years DESC  ;

在此处输入图像描述

4

1 回答 1

2

您的查询基于当前日期,因此对于给定数据的固定值,您会期望它与问题中的示例输出不同。该输出基于设置问题和运行查询的时间 - 无论那天是什么日期。(显然 2013-06-03,使用此处找到的架构构建的调整子集)。

因此,在那个日期,例如 2007-02-02 的注册日期是 6.34 年前,但现在是 1.33 年后,所以今天相同的查询得到了 7.67 的答案。

您假设结果必须与您给出的完全匹配,而实际上它只是向您显示它应该采用的格式。预计确切的年数会有所不同。所以你的查询没有错,你稍微曲解了这个问题。

如果查询是在ROUND早上或下午运行,也会给你稍微不同的结果。TRUNC(sysdate)使用忽略时间部分更正常。正如评论中指出的那样,您的通配符使用错误,您可以使用LIKE '203-%'.

于 2014-10-01T08:06:18.217 回答