Thread: syntax for using function parameter in to_char

syntax for using function parameter in to_char

From
Kevin Barrett
Date:
I am trying to write a function that will take a big int as a paramter and 
return a formatted date string.  The dates in the system I am using are all 
stored as bigint values ( based Java EPOCH ) to I need this function to 
make some sense of the date.

Here is my code:

CREATE FUNCTION java_date( bigint ) RETURNS text AS '   select to_char(\'epoch\'::datetime + \'$1 seconds\'::interval,

\'dd/mm/yyyy hh:mi\') as RESULT ' LANGUAGE 'sql';


The problem seems to be that the $1 in the to_char function is not getting 
parsed with the actual value of $1.

If I execute the following from the command line, I get the expected 
response:

=> select to_char('epoch'::datetime + '1012437127 seconds'::interval, 
'dd/mm/yyyy hh:mi');
    to_char
------------------30/01/2002 06:32
(1 row)

All I am trying to do is move the functionality of this SQL statement to a 
function so I can easily reuse it.

Any help would be appreciated.

Kevin Barrett




Re: syntax for using function parameter in to_char

From
"Josh Berkus"
Date:
Kevin,

> CREATE FUNCTION java_date( bigint ) RETURNS text AS '
>     select to_char(\'epoch\'::datetime + \'$1 seconds\'::interval, 
> \'dd/mm/yyyy hh:mi\') as RESULT
>   '
>   LANGUAGE 'sql';

Try this instead:
CREATE FUNCTION java_date( bigint ) RETURNS text AS '      select to_char(''epoch''::datetime +              (CAST($1
ASVARCHAR) || ''seconds'')::interval,               ''dd/mm/yyyy hh:mi'') as RESULT
 
'
LANGUAGE 'sql';

Got it?  Check, though, a "CAST (bigint as varchar)" may or may notwork.

-Josh



______AGLIO DATABASE SOLUTIONS___________________________                                      Josh Berkus Complete
informationtechnology      josh@agliodbs.com  and data management solutions       (415) 565-7293 for law firms, small
businesses       fax 621-2533   and non-profit organizations.      San Francisco