我有两列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:311或12:29:11:310查询取消。我想要获取取消的记录。
谢谢,
Chaitu
答案 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
在这种情况下的含义没有含糊不清,因为日期总是小于未来日期,这不一定适用于字符串。
我希望这是有道理的。