SQL“Where”语法是今天

时间:2013-07-31 12:27:27

标签: sql oracle timestamp

我需要今天curdate所有的所有条目...... curdate的类型为timestamp。 当然我在Google搜索了这个,但我认为我使用了错误的关键字。

select * from ftt.element fee, ftt.plan p 
where p.id=ftt.p_id and curdate ??? 
order by p_id, curdate desc;

你能提供给我吗?

4 个答案:

答案 0 :(得分:3)

SYSDATE返回Oracle中的当前日期时间。 DATE列还包含Oracle中的时间部分 - TIMESTAMP列。

要检查“今天”,您必须删除两个值中的时间部分:

select * 
from ftt.element fee
  join ftt.plan p on p.id=ftt.p_id 
where trunc(curdate) = trunc(sysdate)
order by p_id, curdate desc;

您还应该习惯使用显式JOIN而不是WHERE子句中的隐式连接。

如果您需要处理不同的时区(例如因为curdatetimestamp with time zone),那么您可能希望使用CURRENT_TIMESTAMP(包括时区)而不是{{ 1}}

答案 1 :(得分:3)

这个答案与a_horses_with_no_name的答案非常相似。区别在于它的执行速度更快。在比较之前对列进行计算会降低性能。

select * 
from ftt.element fee
join ftt.plan p on p.id=ftt.p_id 
where curdate >= trunc(sysdate)
and curdate < trunc(sysdate + 1)
order by p_id, curdate desc;   

答案 2 :(得分:0)

有基本的日间功能。这里有几个:

getDate()
Now()

在不知道你的DBMS的情况下,我不能说哪个特别适用

答案 3 :(得分:0)

到目前为止,无论你做了什么都非常麻烦!!!!我在上面的查询中做的是你正在尝试加入2个表。 首先加入2个表:

Select * from table1 join table2 on table1.id = table2.id;

现在要在此查询中包含任何条件,请在上述查询之后对此进行连接:

Select * from table1 join table2 on table1.id = table2.id where curdate = date;

这里定义date = CURDATE();在触发查询之前。 希望它会对你有所帮助。