0

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

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

你能提供给我吗?

4

4 回答 4

3

SYSDATE返回 Oracle 中的当前日期时间。在 Oracle 中,一DATE列还包含一个时间部分——也是一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;

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

如果您需要处理不同的时区(例如因为curdate是 a timestamp with time zone),那么您可能想要使用CURRENT_TIMESTAMP(包括时区)而不是SYSDATE

于 2013-07-31T12:35:46.113 回答
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;   
于 2013-07-31T12:43:57.840 回答
0

有基本的日常功能。这里有一对:

getDate()
Now()

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

于 2013-07-31T12:32:40.723 回答
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(); 在您触发查询之前。希望它会帮助你。

于 2013-07-31T12:39:35.280 回答