How to format a date with a serial number for DEFAULT?

From: Michiel Lange <michiel(at)minas(dot)demon(dot)nl>
To: pgsql-admin(at)postgresql(dot)org
Subject: How to format a date with a serial number for DEFAULT?
Date: 2005-03-15 15:27:45
Message-ID: 4236FEF1.7050606@minas.demon.nl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

Hello list,

I am trying to create a table that hould countain a number formatted
this way: YYYYMMDD##########

Where the hashes should be padded to '0'.

I have tried the following
template_test=# CREATE TEMP TABLE test (
template_test(# counter SERIAL,
template_test(# foobar CHAR(18)
template_test(# DEFAULT CAST(date_part('year',current_date) AS TEXT)
template_test(# ||
CAST(CAST(to_char(date_part('month',current_date),'00') AS INT) AS TEXT)
template_test(# ||
CAST(CAST(to_char(date_part('day',current_date),'00') AS INT) AS TEXT)
template_test(# ||
CAST(CAST(to_char(nextval('test_counter_seq'),'0000000000') AS INT) AS
TEXT),
template_test(# tekst TEXT);

This resulted in something almost good, but I lost the padding zeroes.
I got "20053151"

Without the many CAST's like this:
template_test=# CREATE TEMP TABLE test (
template_test(# counter SERIAL,
template_test(# foobar CHAR(18)
template_test(# DEFAULT CAST(date_part('year',current_date) AS TEXT)
template_test(# || to_char(date_part('month',current_date),'00')
template_test(# || to_char(date_part('day',current_date),'00')
template_test(# ||
to_char(nextval('test_counter_seq'),'0000000000'),
template_test(# tekst TEXT);

Resulted in something almost right as well, but now to_char adds a space
before each to_char
I would get a result like "2005 03 05 0000000001"

What options do I have to get this straight?

Mind that I created TEMP tables to test how I should set my default
value....
TIA
Michiel

Responses

Browse pgsql-admin by date

  From Date Subject
Next Message Brad Nicholson 2005-03-15 15:32:37 Re: Performance Question
Previous Message Fred Blaise 2005-03-15 15:00:27 grant with pl/pgsql script