to_date 和 to_char 使用区别

      今天有开发人员问,为什么使用to_date不能把当日的数据查出来,开发提交给dba的sql如下:


  1. select *
  2.   from lsmp_lottery_user l
  3.  where l.LUSER_STATUS = 1
  4.    and l.LUSER_REGISTER_TIME >= to_date(\'2013-03-04\', \'yyyy-mm-dd\')
  5.    and l.LUSER_REGISTER_TIME <= to_date(\'2014-03-04\', \'yyyy-mm-dd\');
虽然使用了“=”,但是并没有把2013-03-04和2014-03-04的数据查出来,然后我让他把sql改成了下面这样:


  1. select *
  2.   from lsmp_lottery_user l
  3.  where l.LUSER_STATUS = 1
  4.    and l.LUSER_REGISTER_TIME >= to_date(\'2013-03-04 00:00:00\', \'yyyy-mm-dd hh24:mi:ss\')
  5.    and l.LUSER_REGISTER_TIME <= to_date(\'2014-03-04 23:59:59\', \'yyyy-mm-dd hh24:mi:ss\');
或者


  1. select *
  2.   from lsmp_lottery_user l
  3.  where l.LUSER_STATUS = 1
  4.    and to_char(l.LUSER_REGISTER_TIME, \'yyyy-mm-dd\') >=\'2013-03-04\'
  5.    and to_char(l.LUSER_REGISTER_TIME, \'yyyy-mm-dd\') <=\'2014-03-04\';
此时就能查询出2013-03-04和2014-03-04这两天的数据了,
究其原因,是因为
to_date查询是带时分秒的查询,所以当数据库中有时分秒时就会出现差别


请使用浏览器的分享功能分享到微信等