Thread: Year Only Date Column

Year Only Date Column

From
"Jeff Flowers"
Date:
I want to create a date column that contains only the year, such as
YYYY. Can this done in PostgreSQL? I didn't see this listed in the
handbook and right now, the only way I can see to do would be to create
a numeric data field with zero scale and a precision of four.


Thanks,

--
Jeff Flowers

Re: Year Only Date Column

From
Michael Glaesemann
Date:
On Nov 23, 2004, at 10:16 PM, Jeff Flowers wrote:

> I want to create a date column that contains only the year, such as
> YYYY. Can this done in PostgreSQL? I didn't see this listed in the
> handbook and right now, the only way I can see to do would be to create
> a numeric data field with zero scale and a precision of four.

You could do that, or create a domain that would restrict the date to
only be, say, CCYY-01-01, which would represent the year. Something
like:

test=# create domain date_year as date check (Date_trunc('year',value)
= value);
CREATE DOMAIN
test=# select '1990-01-01'::date_year;
  date_year
------------
  1990-01-01
(1 row)

test=# select '1990-02-01'::date_year;
ERROR:  value for domain date_year violates check constraint
"date_year_check"

It'll throw an error if you try to enter a date that isn't on January 1
of that year.

Just an idea.

Michael Glaesemann
grzm myrealbox com


Re: Year Only Date Column

From
"Jeff Flowers"
Date:
On Tue, 23 Nov 2004 22:28:08 +0900, "Michael Glaesemann"
<grzm@myrealbox.com> said:
>
> On Nov 23, 2004, at 10:16 PM, Jeff Flowers wrote:
>
> > I want to create a date column that contains only the year, such as
> > YYYY. Can this done in PostgreSQL? I didn't see this listed in the
> > handbook and right now, the only way I can see to do would be to create
> > a numeric data field with zero scale and a precision of four.
>
> You could do that, or create a domain that would restrict the date to
> only be, say, CCYY-01-01, which would represent the year.

Since I will be using this column only for the sake of completeness, I
think that I will either use the numeric column (or perhaps a CHAR(4)
column).


Thanks,

--
Jeff Flowers