论坛首页 Java企业应用论坛

Oracle 时间段查询

浏览 16869 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (3)
作者 正文
   发表时间:2011-06-17   最后修改:2011-06-19

    需求:根据用户输入的时间段查询出记录。

Oracle数据库中一个一个存放时间的字段,字段类型是DATE型的,其中有这样的两条数据



 这个字段存有时分秒,用户输入的时候是按日期来查询的,也就是说只有年月日,最初我是这样查询的:

select * from tb_product where createdate>=to_date('2011-6-13','yyyy-MM-dd') and createdate<=to_date('2011-6-16','yyyy-MM-dd');

 这样查询的话2011/6/16这条记录是查不出来的,因为字段存了时分秒。

最后通过群里的朋友的指点改成了这样:

select * from tb_product where to_char(createdate,'yyyy-MM-dd')>='2011-6-13' and to_char(createdate,'yyyy-MM-dd')<='2011-6-16';

 这样也查不出来,不是语句错了,而是我日期格式错了,日期格式是‘yyyy-MM-dd’这样的,而我写的是2011-6-13,改成

2011-06-13和2011-06-16就可以了。

   上面的方法就是只按照日期查询的方法了,各位有更好的方法,请留言。

 

 

  • 大小: 4.2 KB
   发表时间:2011-06-17  
你还是应该使用第一种方法,因为第二种方法吧数据库中所有的数据都做了 to_char.
to_date 是 yyyy-mm-dd 不是MM 同时你还应该注意临界时间
0 请登录后投票
   发表时间:2011-06-17  
chansman 写道
你还是应该使用第一种方法,因为第二种方法吧数据库中所有的数据都做了 to_char.
to_date 是 yyyy-mm-dd 不是MM 同时你还应该注意临界时间

把数据库中所有的数据都做了 to_char. 这怎么里面,是数据库中所有的记录都这样处理了?
0 请登录后投票
   发表时间:2011-06-17  
to_char那岂不是把查询的时间字段转换为字符来进行比较大小,那还有何意义呢?那还不干脆在设计库的时候就把时间字段设置为字符型的,只是觉得违反约束了.
0 请登录后投票
   发表时间:2011-06-17  
select * from tb_product where trunc(createdate)>=? and trunc(createdate)<=?
用trunc函数就可以了
0 请登录后投票
   发表时间:2011-06-17  
不要把函数用在表字段上,这种方式无法利用索引,必然产生全表扫描。除非建立函数索引。
建议在进入SQL查询前,先对参数进行一些处理。在to_date前,在参数后面加上分钟比较合适。
0 请登录后投票
   发表时间:2011-06-17  
createdate是索引字段的话,第二个SQL丢失索引
也不知识谁指导LZ的
0 请登录后投票
   发表时间:2011-06-18   最后修改:2011-06-18
select * from tb_product where

createdate > to_date('2011-6-15','yyyy-MM-dd') - 1

and

createdate<=to_date('2011-6-16','yyyy-MM-dd') + 1;


上面写有问题:

好像是应该是

>=  aaa

and

<  bbb - 1
0 请登录后投票
   发表时间:2011-06-18  
createdate < to_date('2011-6-16','yyyy-MM-dd') + 1;
0 请登录后投票
   发表时间:2011-06-18  
wad12302 写道
select * from tb_product where

createdate > to_date('2011-6-15','yyyy-MM-dd') - 1

and

createdate<=to_date('2011-6-16','yyyy-MM-dd') + 1;


个人认为这种方式好一些
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics