在SQL中使用提取获取昨天的详细信息

在SQL中使用提取获取昨天的详细信息,sql,oracle,Sql,Oracle,我想知道昨天用提取物治疗的病人的详细情况 但我犯了一个错误 ORA-00911:无效字符 我的代码: consultation(patient_id, cdate, doctor_id) 您需要放入整数1而不是字符串“1” select * from consultation where extract(day from cdate) = extract(day from sysdate) - '1'; 您可以避免提取,只需使用: select * from consultation w

我想知道昨天用提取物治疗的病人的详细情况 但我犯了一个错误

ORA-00911:无效字符

我的代码:

consultation(patient_id, cdate, doctor_id)

您需要放入整数1而不是字符串“1”

select * 
from consultation 
where extract(day from cdate) = extract(day from sysdate) - '1';
您可以避免提取,只需使用:

select * from consultation where
extract(day from cdate) = extract(day from sysdate) - 1;
在这里,我使用trunc删除时间部分;另外,请注意,通过使用extract比较当天,您不仅可以获得昨天的记录,甚至还可以获得过去几个月的记录

如果您需要获取日期为6的所有记录(假设sysdate为5月7日),无论是月份还是年份,您都可以使用:

select *
from consultation 
where trunc(cdate) = trunc(sysdate-1)
不希望在日期列上使用EXTRACT,因为它效率较低,尤其是在日期列上有索引或分区的情况下。只需在SYSDATE上使用TRUNC


use-extractday from cdate=extractday from sysdate-1;请记住,只有检查Day=Day也会返回所有其他月份的记录。你也应该考虑月份和年份。为什么要使用摘录?这样,如果您现在运行它,您甚至可以得到4月7日、3月7日等等。这就是你所需要的吗?不过,这不会给你cdate=昨天的结果。我认为您在寻找trunccdate=truncsysdate-1,或者,如果您想使用cdate上的索引,类似cdate>=truncsysdate-1和cdatewhere extract(day from cDate) = extract(day from sysdate -1)
select * from consultation where 
     cdate  >= TRUNC(sysdate) - 1
 AND cdate  <  TRUNC(SYSDATE)