to_char()
是爲了格式的日期。對於像你這樣的條件,extract()
簡單&更快:
SELECT *
FROM people
WHERE extract(month FROM dob) = 7;
如果你想搜索
a specific year and month too (YYYY-MM)
...好像在評論中提到,使用date_trunc()
像你最初曾。只需將其與date
或timestamp
進行比較,而不是字符串,這沒有任何意義(並且是錯誤消息的原因)。爲了找到生於1970年7月的人:
SELECT *
FROM people
WHERE date_trunc('month', dob) = '1970-07-01 0:0'::timestamp;
如果性能是相關的,重寫到:
SELECT *
FROM people
WHERE dob >= '1970-07-01 0:0'::timestamp
AND dob < '1970-08-01 0:0'::timestamp; -- note the < with the upper limit
因爲這種形式可以people.dob
使用普通指數:
CREATE INDEX people_dob_idx ON people (dob);
.. 。因此將用大表覈查以前查詢的性能。小桌子無關緊要。
如果需要,還可以使用functional index加速第一個查詢。
很好的鏈接。我能夠找到出生在特定年份和月份的人(YYYY-MM)。謝謝 – mamesaye
@mamesaye:鏈接是過時版本8.2的手冊。將其更改爲指向版本8.4。 –
@Erwin Brandstetter謝謝 –