来自to_char TO(to_timestamp或to_Date)的Oracle格式转换

时间:2017-08-05 04:44:48

标签: oracle

SELECT Owner
     FROM
            TABLEX
     WHERE  (
               ( To_Char(From_Date,'YYYYMM') <= '201707' )
                 And
               ( To_Char(To_Date,'YYYYMM') >= '201707' )
            );

Oracle Query:

FROM_DATETo_Date处于时间戳格式。此查询工作正常,但我的经理告诉我to_char格式比较减慢了查询的性能,他问我要使用日期格式或时间戳格式进行转换。我尝试了不同的组合,但无法识别。请建议。 我做过一些尝试。

select to_date('201707','YYYYMM') from DUAL。 这给了我(01-JUL-2017),但我必须检查大于等的所有值。

2 个答案:

答案 0 :(得分:1)

要使查询尽可能高效,请使用与要比较的列相同的数据类型的常量。这消除了数据库为每行执行类型转换的需要:

Select owner From tablex
 Where From_Date < To_Timestamp('2017-08-01 00:00:00','yyyy-mm-dd hh24:mi:ss')
  And To_Date >= To_Timestamp('2017-07-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss');

答案 1 :(得分:-2)

使用Trunc功能代替To_Char

SELECT Owner
         FROM
                TABLEX
         WHERE  (
                   ( Trunc(From_Date,'YYYYMM') <= '201707' )
                     And
                   ( Trunc(To_Date,'YYYYMM') >= '201707' )
                );