oracle to_timestamp获取毫秒数,to_date不能获取

因为YDJG_ROLL表数据量很大,一般查询的是某一天的数据;create_time为TIMESTAMP(6)类型,create_time建立了索引,开始用

select * from ydjg_roll where to_char(create_time,‘yyyy-MM-dd’)='2019-09-16'

能查询出结果,但是很慢,因为create_time索引并没有用上,那就换种方式

select *
  from ydjg_roll
 where create_time between
       to_date('2019-09-03 00:00:00', 'yyyy-MM-dd hh24:mi:ss') and
       to_date('2019-09-03 23:59:59', 'yyyy-MM-dd hh24:mi:ss')

这样改完之后查询结果秒出,但是又一想,这样查询出来的结果并不准确,因为create_time是timestamp类型,有毫秒数,上面的sql中2019-09-03 23:59:59:000至2019-09-03 23:59:59:999之间的数据并不会被查询到,所以还得修改sql,如下:

SELECT *
  FROM YDJG_ROLL
 WHERE CREATE_TIME BETWEEN
       TO_TIMESTAMP('2019-09-03 00:00:00.000', 'YYYY-MM-DD HH24:MI:SS.FF') AND
       TO_TIMESTAMP('2019-09-03 23:59:59.999', 'YYYY-MM-DD HH24:MI:SS.FF')

使用to_timestamp函数就可以了。
 

你可能感兴趣的:(oracle)