从双表的sql日期和时间比较

时间:2012-02-21 21:58:46

标签: sql oracle

我有两列state_date和state_time

我想使用列state_date和state_time.State_date和state_time从数据库中提取记录应该小于或等于sql.Below sql以下给出日期和时间。但是我有单独的列一个有日期而另一个有时间.SO首先我要比较日期和之后的时间。我如何修改以下查询,以毫秒秒分别获得日期和时间。

select decode(TRIM(to_char(SYSDATE,'Day')),'Monday','3','1') from dual

示例数据:

订单表:

order id   order name  order date
1          pizza       20-feb-2012
2          burger      17-feb-2012

order_state表

order id     order_state     order_date                order_time
1             initiated      20-feb-2012               12:29:11:203
1             processed      21-feb-2012               12:29:12:112
1             cancelled      21-feb-2012               12:29:11:311

所以在这里我想获取最新记录,即基于order_date和order_time,order_id和今天date.if我今天在12:29:10:3​​11或12:29:11:310查询取消。我想要获取取消的记录。

谢谢,

Chaitu

1 个答案:

答案 0 :(得分:2)

好的,我想我已经找到了你。您想要执行以下操作吗?

select <columns>
  from my_table
 where state_date <= <some date>
   and state_time <= <some time>

关心毫秒是很不寻常的,但如果你这样做,你应该使用systimestamp

从你分割日期和时间的事实来看,这些都是字符,所以,我将不得不猜测format masks。如果他们错了,链接应指导您做什么。顺便说一下,以这种方式分割日期并不明智。您可以使用表格中的timestamp数据类型创建列,这会使您的问题变得非常简单。

因此,我不知道为什么您为查询选择了'Day'格式,但使用<some date>格式变为to_char(sysdate, 'DAY')


<some date>下方的评论中to_char(sysdate, 'DD-MON-YY')


<some time>将为to_char(systimestamp,'HH24:MI:SS:FF3'),它会为您提供毫秒级的时间戳,但数据类型可以转到微秒级。

对我来说似乎有点奇怪,但你的查询会变成:

select <columns>
  from my_table
 where state_date <= to_char(sysdate, 'DD-MON-YY')
   and state_time <= to_char(systimestamp,'HH24:MI:SS:FF3')

如果将日期存储为字符串,以yyyymmdd格式存储它会更为正常,所以至少可以保证它按顺序排列。如果您已经完成了类似的操作,那么只需更改格式掩码即可。如果还没有,那么这些查询将无法按预期工作。


就个人而言,如果您 以这种方式存储数据,并假设state_date存储为dd-mon-yy,即包括年,月和日,以及{{ 1}}如上所示存储,然后我会做这样的事情:

state_time

它使正在发生的事情变得更加明显,并且select <columns> from my_table where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3') <= systimestamp 在这种情况下的含义没有含糊不清,因为日期总是小于未来日期,这不一定适用于字符串。

我希望这是有道理的。