我不知道我做错了什么。我正在使用SQL类,我打算这样做:列出2007年2月13日注册的所有学生的名字,姓氏和电话号码。按照姓氏和名字的顺序排列列表。
现在我正在尝试这个SQL语句。我运行时收到“没有选择行”的通知:
Select first_name, last_name, phone
FROM Student
WHERE registration_date LIKE '%13/02/2007%'
ORDER by last_name, first_name;
我做错了什么?我现在已经待了半个小时了。
答案 0 :(得分:0)
您不应该依赖默认日期格式,也不应该依赖Oracle从字符串到DATE的隐式转换功能。使用DATE文字(总是具有相同的格式:YYYY-MM-DD),或使用具有适当格式掩码的TO_DATE函数。
select first_name, last_name, phone
from student
where registration_date = date '2007-02-13'
order by last_name, first_name;
或
select first_name, last_name, phone
from student
where registration_date = to_date('13.02.2007', 'dd.mm.yyyy')
order by last_name, first_name;
如果这样的查询仍然没有返回任何内容,可能REGISTRATION_DATE包含一个时间组件(我认为它不应该,但你永远不会知道)。然后你必须删除它,例如
where trunc(registration_date) = date '2007-02-13'
除非您创建基于函数的索引,否则将导致该列上的索引不可用。
另一种可能性是没有人在2007年2月13日注册。
答案 1 :(得分:-1)
你可以张贴表结构吗? 命令desc tablename,当你想要执行特定的注册日期时,为什么要使用相同的条件。
取决于所提供的信息
SELECT first_name, last_name, phone FROM student WHERE registration_date='2008-11-11' ORDER BY first_name ASC, last_name DESC
像这样使用。