Обсуждение: function date_part

Поиск
Список
Период
Сортировка

function date_part

От
PDH.KFI3@t-online.de (Andreas Stahlhut)
Дата:
Hi,

I need a primary key (int4) in a table which is build from the actual year and a
serial number like 20000001 (year 2000 and the serial number 0001).
If I get the function date_part to build this number like   select       int4(date_part('year', 'now'::datetime) *
10000+ nextval('serial_seq'))   as primkey; 
 
it works.
If I use this in a create table like   create table primtab(      primkey           int4 primary key           default
         int4(date_part('year', 'now'::datetime) * 1000+nextval('serial_seq'))   ); 
 
it never works.ERROR:  parser: parse error at or near "'"

If I use it in a create function like   create function primfnc() returns int4     as 'select .... as primnum'
language'sql';
 
it never works.ERROR:  parser: parse error at or near "year"

Is there a mistake in the SQL-QUERY's or isn't it implemented?

Thanks for an answer

Andreas-- 
Andreas Stahlhut                                stahlhut@talkline.de
Diplomverwaltungswirt
PD Hannover, ZKD, 3.2 K                         PDH.KFI3@t-online.de
Alter Flughafen 18a                             Tel (0511) 109-5377
30179 Hannover                                  Fax (0511) 109-5330


Re: function date_part

От
Tom Lane
Дата:
PDH.KFI3@t-online.de (Andreas Stahlhut) writes:
> If I use this in a create table like
>     create table primtab(
>        primkey
>             int4 
>     primary key
>             default 
>             int4(date_part('year', 'now'::datetime) * 1000+nextval('serial_seq'))
>     ); 
> it never works.
>     ERROR:  parser: parse error at or near "'"

The default-value support in 6.5.* is pretty limited, not to say broken;
I think it is probably failing on the '::datetime' part of that
expression.  7.0 copes just fine.  As a workaround for 6.5, you might
try writing date_part('year', now()) instead.

> If I use it in a create function like
>     create function primfnc() returns int4
>       as 'select .... as primnum'
>       language 'sql';
> it never works.
>     ERROR:  parser: parse error at or near "year"

This is probably pilot error.  Did you remember to double the ' symbols
in the body of the function definition?  Remember the body is itself
a single-quoted string, so any embedded quote marks must be written ''
(or \' if you prefer).
        regards, tom lane