Thread: function date_part
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
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