PostgreSQL: Select data with a like on timestamp field

£可爱£侵袭症+ 提交于 2019-11-29 22:15:17

It's all very well not "wanting to use" < and > with timestamps, but those operators can be converted into index scans, and a string-match... well, it can, but EWWWW.

Well, the error is occurring because you need to explicitly convert the timestamp to a string before using a string operation on it, e.g.:

date_checker::text LIKE '2011-01-%'

and I suppose you could then create an index on (date_checker::text) and that expression would become an index scan but.... EWWWW.

Perhaps the date_trunc function would be more to your liking:

... WHERE date_trunc('month', my_table.date_checker) = '2011-01-01'

You can also put an index on that expression, if needed.

Scott Marlowe

If you need to do a comparison on some part of a timestamp, it's far better to use the EXTRACT() function. For example:

WHERE EXTRACT(YEAR FROM date_checker) = 2011
AND EXTRACT(MONTH FROM date_checker) = 1

Details of the different "fields" you can extract from a date are in the documentation.

I don't believe you can do a like on a date column without converting it to a string representation first.

You can use the between query to select between two dates, for instance:

SELECT id FROM my_table WHERE date_checker BETWEEN '2011-01-01' AND '2011-02-01';
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!