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

Поиск
Список
Период
Сортировка
От Robert Perry
Тема Re: How to format a date with a serial number for DEFAULT?
Дата
Msg-id 7c3af9cfcb7efac34c8d997d7ce19e9f@lodestonetechnologies.com
обсуждение исходный текст
Ответ на Re: How to format a date with a serial number for DEFAULT?  ("Andrei Bintintan" <klodoma@ar-sd.net>)
Список 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@minas.demon.nl>
> To: <pgsql-admin@postgresql.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
>


В списке pgsql-admin по дате отправления:

Предыдущее
От: Scott Marlowe
Дата:
Сообщение: Re: Performance problem...
Следующее
От: "Chris Hoover"
Дата:
Сообщение: Vacuum questions