SELECT Owner
FROM
TABLEX
WHERE (
( To_Char(From_Date,'YYYYMM') <= '201707' )
And
( To_Char(To_Date,'YYYYMM') >= '201707' )
);
Oracle Query:
FROM_DATE
,To_Date
处于时间戳格式。此查询工作正常,但我的经理告诉我to_char格式比较减慢了查询的性能,他问我要使用日期格式或时间戳格式进行转换。我尝试了不同的组合,但无法识别。请建议。
我做过一些尝试。
select to_date('201707','YYYYMM') from DUAL
。
这给了我(01-JUL-2017
),但我必须检查大于等的所有值。
答案 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' )
);