Re: [SQL] converting from number to text - Mailing list pgsql-sql

From tolik@icomm.ru (Anatoly K. Lasareff)
Subject Re: [SQL] converting from number to text
Date
Msg-id 877lp4fkfb.fsf@tolikus.hq.aaanet.ru
Whole thread Raw
In response to converting from number to text  (Remigiusz Sokolowski <rems@gdansk.sprint.pl>)
List pgsql-sql
>>>>> "fRS" == Remigiusz Sokolowski <rems@gdansk.sprint.pl> writes:
fRS> Hi!fRS> I need convert number(float or integer) to text, but my version offRS> postgres (i.e. 6.3.2) seems to have
notsuch a function?fRS> Is it may be in newer versions or is there any work-around?fRS> TIAfRS> RemsfRS> p.s. concept
isto have field, which contain date in timestamp formfRS> (number of seconds from 'epoch'), but in which I could insert
alsovaluefRS> 'until cancellation' or any other text.
 

I send text of four function for int|float <-> text conversion.
==============================
Headers of the functions (you must replace DESTLIB to the real name of 
your .so file):

void * text2float(text *t);
/*sql create function text2float(text) returns float as 'DESTLIB' language 'c'*/

text* float2text(float8 *f, int prec);
/*sql create function float2text(float, int) returns text as 'DESTLIB' language 'c'*/

int4  text2int(text* t);
/*sql create function text2int(text) returns int as 'DESTLIB' language 'c'*/

text* int2text(int4 i);
/*sql create function int2text(int) returns text as 'DESTLIB' language 'c'*/===============================

Bodies of the functions:

void * text2float(text *t)
{ int l; char *c; float8 * ret;
 if(!t)   return NULL;
 l = VARSIZE(t) - VARHDRSZ + 1; c = palloc(l);
 memset(c, 0, l); memcpy(c, VARDATA(t), l); ret = palloc(sizeof(float8)); *ret = strtod(c, NULL); return ret;
}

text* float2text(float8 *f, int prec)
{ char s[40]; char fmt[10]; text* ret; int l;
 if(!f)   return NULL;
 sprintf(fmt, "%%.%dlf", prec); sprintf(s, fmt, *f);
 l = VARHDRSZ + strlen(s); ret = palloc(l); VARSIZE(ret) = l; memcpy(VARDATA(ret), s, strlen(s));
 return ret;
}

int4  text2int(text* t)
{ char* buf; int   l;
 if (!t)   return 0;
 l = VARSIZE(t) - VARHDRSZ; buf = palloc(l + 1); memset(buf, 0, l + 1); memcpy(buf, VARDATA(t), l);
 return atoi(buf);
}

text* int2text(int4 i)
{ text *ret; char s[20]; int l;
 sprintf(s, "%d", i); l = VARHDRSZ + strlen(s); ret = palloc(l); VARSIZE(ret) = l; memcpy(VARDATA(ret), s, l -
VARHDRSZ);
 return ret;
}


===============================

-- 
Anatoly K. Lasareff              Email:       tolik@icomm.ru 
Senior programmer


pgsql-sql by date:

Previous
From: Herouth Maoz
Date:
Subject: Re: [SQL] converting from number to text
Next
From: Remigiusz Sokolowski
Date:
Subject: Re: [SQL] converting from number to text