我目前正在使用以下查询来完成2010年6月的所有检查:
select inspections.name
from inspections
where
to_char(inspections.insp_date, 'YYYY') = 2010 and
to_char(inspections.insp_date, 'MM') = 06;
但这感觉有点尴尬。难道不会有更好的方法吗?看http://infolab.stanford.edu/~ullman/fcdb/oracle/or-time.html它似乎并非如此。我正在使用Oracle,如果它有所作为。
由于
答案 0 :(得分:11)
我喜欢在可能的情况下使用范围比较,因为优化器可以将其用于索引扫描:
select inspections.name
from inspections
where inspections.date >= DATE '2010-06-01'
and inspections.date < DATE '2010-07-01'
答案 1 :(得分:4)
我同意文森特的回答,但为了完整起见,你可以将你简化为:
select inspections.name
from inspections
where
to_char(inspections.insp_date, 'YYYYMM') = '201006';
如果索引是:
,那甚至可以使用索引create index x on inspections (to_char(insp_date, 'YYYYMM'));
答案 2 :(得分:3)
select inspections.name
from inspections
where
extract(year from inspections.insp_date) = 2010 and
extract(month from inspections.insp_date) = 6;
答案 3 :(得分:3)
另一种选择是
SELECT inspections.name
FROM inspections
WHERE TRUNC( inspections.insp_date, 'MM' ) = date '2010-06-01';
从效率的角度来看