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

From: Robert Perry <rlperry(at)lodestonetechnologies(dot)com>
To: pgsql-admin(at)postgresql(dot)org
Subject: Re: How to format a date with a serial number for DEFAULT?
Date: 2005-03-15 17:30:21
Message-ID: 7c3af9cfcb7efac34c8d997d7ce19e9f@lodestonetechnologies.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

I am far to lazy to bother actually trying it, but I believe prefixing
your format string for the bigint returned by nextval with 'FM' will
eliminate your need for the trim.

On Mar 15, 2005, at 11:15 AM, Andrei Bintintan wrote:

> CREATE TABLE test(
> counter SERIAL,
> foobar CHAR(18)
> DEFAULT to_char(CURRENT_DATE, 'DDMMYYYY') ||
> trim(to_char(nextval('test_counter_seq'),'0000000000')),
> tekst TEXT);
>
> I don't know exactly why the white space is in, but the trim function
> takes
> it out.
>
> Best regards,
> Andy.
>
> ----- Original Message ----- From: "Michiel Lange"
> <michiel(at)minas(dot)demon(dot)nl>
> To: <pgsql-admin(at)postgresql(dot)org>
> Sent: Tuesday, March 15, 2005 5:27 PM
> Subject: [ADMIN] How to format a date with a serial number for DEFAULT?
>
>
>> 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
>>
>> ---------------------------(end of
>> broadcast)---------------------------
>> TIP 4: Don't 'kill -9' the postmaster
>>
>>
>
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 9: the planner will ignore your desire to choose an index scan if
> your
> joining column's datatypes do not match
>

In response to

Browse pgsql-admin by date

  From Date Subject
Next Message Chris Hoover 2005-03-15 20:46:57 Vacuum questions
Previous Message Gordon A. Fox 2005-03-15 17:27:49 Fixing "old version was found" error