pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Jasen Betts <jasen@xnet.co.nz>
To: pgsql-sql@postgresql.org
Subject: Re: pattern matching with dates?
Date: 8 Jan 2011 10:22:23 GMT
Message-ID: <ig9dsv$8v3$1@reversiblemaps.ath.cx> (raw)
References: <FA041D403EDFCD4397E1F6382360ECFCFDB5697143@SVCMCEMAIL.svcmc.svcmcny.org>

On 2011-01-05, Good, Thomas <tgood@svcmcny.org> wrote:
> This dubious query worked well previously:
> select * from db_log where log_date LIKE '2011-01-%';
> (currently works on bluehost.com where they run 8.1.22)
>
> Can someone offer a (preferably ANSI compliant) way to do this on 8.4.5?

  where date_trunc( log_date,'month') = '2011-01-01'::timestamp;

or standard

  where extract( 'year' from log_date) = 2011 and extract ( 'month' from log_date) = 1;


this:

  where cast( log_date as varchar ) like '2011-01-%'

is as far as I can tell standard, but is almost certainly non-portable 
as it is dependant of the character format used for casting dates to
varchar.


> I realize that >= and so on work well (which may explain why the docs
> are pretty silent about pattern matching with dates) but sometimes it's nice to 
> treat the (ISO) date as a string.

">= etc" will outperform date_trunc, like , and extract if the date column
is indexed. the performance of % can be improved in recent versions by
indexing on the expression (log_date::text)


best performance is probably

 where log_date between '2011-01-01'::date and  '2011-01-01'::date + '1 month - 1 day' ::interval;

or standard (I think)

 where log_date between cast('2011-01-01' as date) and  cast ( '2011-01-01' as date) + cast ( '1 month - 1 day' as interval) ;

-- 
⚂⚃ 100% natural



view thread (6+ messages)

Message-ID: <ig9dsv$8v3$1@reversiblemaps.ath.cx>
Permalink:  ../ig9dsv$8v3$1@reversiblemaps.ath.cx/
Also on:    postgresql.org/message-id/ig9dsv$8v3$1@reversiblemaps.ath.cx

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: jasen@xnet.co.nz
  Subject: Re: pattern matching with dates?
  In-Reply-To: <ig9dsv$8v3$1@reversiblemaps.ath.cx>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox