Thread: How to convert integer to string in functions

How to convert integer to string in functions

From
Siva Palanisamy
Date:

Hi All,

 

In my table, some of the columns are in text datatype. Few data will come down from UI layer as integers. I want to convert that to string/text before saving it into the table. Please help me on this.

 

Thanks and Regards,

Siva.

 



::DISCLAIMER::
-----------------------------------------------------------------------------------------------------------------------

The contents of this e-mail and any attachment(s) are confidential and intended for the named recipient(s) only.
It shall not attach any liability on the originator or HCL or its affiliates. Any views or opinions presented in
this email are solely those of the author and may not necessarily reflect the opinions of HCL or its affiliates.
Any form of reproduction, dissemination, copying, disclosure, modification, distribution and / or publication of
this message without the prior written consent of the author of this e-mail is strictly prohibited. If you have
received this email in error please delete it and notify the sender immediately. Before opening any mail and
attachments please check them for viruses and defect.

-----------------------------------------------------------------------------------------------------------------------

Re: How to convert integer to string in functions

From
David Johnston
Date:

In my table, some of the columns are in text datatype. Few data will come down from UI layer as integers. I want to convert that to string/text before saving it into the table. Please help me on this.


SQL Standard:  "CAST( value AS text )" [or varchar]
PostgreSQL short-hand:  "value::text"

In both formats replace value with whatever you want to convert.  When writing a parameterized  query (using ?) you can write "?::text" ( or Cast(? AS type) ) to explicitly cast the unknown parameter.  The "text" in the above can be any type name.

David J.




Re: How to convert integer to string in functions

From
Adrian Klaver
Date:
On Friday, August 12, 2011 6:53:57 am Siva Palanisamy wrote:
> Hi All,
>
> In my table, some of the columns are in text datatype. Few data will come
> down from UI layer as integers. I want to convert that to string/text
> before saving it into the table. Please help me on this.

Should not need to. String into integer would be a problem, but not integer into
string.

>
> Thanks and Regards,
> Siva.


--
Adrian Klaver
adrian.klaver@gmail.com

Re: How to convert integer to string in functions

From
Stefan Keller
Date:
Hi,

2011/8/12 David Johnston <polobo@yahoo.com>:
> In my table, some of the columns are in text datatype. Few data will come
> down from UI layer as integers. I want to convert that to string/text before
> saving it into the table. Please help me on this.
>
>
> SQL Standard:  "CAST( value AS text )" [or varchar]
> PostgreSQL short-hand:  "value::text"
>
> In both formats replace value with whatever you want to convert.  When
> writing a parameterized  query (using ?) you can write "?::text" ( or Cast(?
> AS type) ) to explicitly cast the unknown parameter.  The "text" in the
> above can be any type name.
>
> David J.

You often find this advice of doing a cast.
But this only works if the input is a clean list of number characters already!
Anything other than this will issue an error:

  postgres=# SELECT '10'::int;

After trying hard to cope with anything possibly as an input string I
found this:

  postgres=# SELECT to_number('0'||mytextcolumn,
'99999999999.000')::int FROM mytable;

You can try this here: Show all peaks of Switzerland which are higher
than 4000 meters above sea.

  SELECT ST_AsText(way) AS geom, name||','||ele AS label
  FROM osm_point
  WHERE "natural" = 'peak'
  AND  to_number('0'||ele, '99999999999.000')::int >= 4000

Any better solutions are welcome.

Yours, Stefan

Re: How to convert integer to string in functions

From
Chris Angelico
Date:
On Tue, Mar 20, 2012 at 7:14 PM, Stefan Keller <sfkeller@gmail.com> wrote:
> But this only works if the input is a clean list of number characters already!
> Anything other than this will issue an error:
>
>  postgres=# SELECT '10'::int;
>
> After trying hard to cope with anything possibly as an input string I
> found this:
>
>  postgres=# SELECT to_number('0'||mytextcolumn,
> '99999999999.000')::int FROM mytable;

I came across the same issue, specifically wanting semantics like C's
atoi function. Some discussion on this list turned up a few options.

Beginning of thread, including one possibility:
http://osdir.com/ml/postgresql-pgsql-general/2012-03/msg00090.html
Another well-researched option, with slightly different semantics:
http://osdir.com/ml/postgresql-pgsql-general/2012-03/msg00094.html

Hope that helps!

ChrisA

Re: How to convert integer to string in functions

From
Stefan Keller
Date:
2012/3/20 Chris Angelico <rosuav@gmail.com>:
> On Tue, Mar 20, 2012 at 7:14 PM, Stefan Keller <sfkeller@gmail.com> wrote:
>> But this only works if the input is a clean list of number characters already!
>> Anything other than this will issue an error:
>>
>>  postgres=# SELECT '10'::int;
>>
>> After trying hard to cope with anything possibly as an input string I
>> found this:
>>
>>  postgres=# SELECT to_number('0'||mytextcolumn,
>> '99999999999.000')::int FROM mytable;
>
> I came across the same issue, specifically wanting semantics like C's
> atoi function. Some discussion on this list turned up a few options.
>
> Beginning of thread, including one possibility:
> http://osdir.com/ml/postgresql-pgsql-general/2012-03/msg00090.html
> Another well-researched option, with slightly different semantics:
> http://osdir.com/ml/postgresql-pgsql-general/2012-03/msg00094.html
>
> Hope that helps!
>
> ChrisA

Referring to your last hint, this is was Tom's answer:
> Can you use to_number() here? It sounds like something along the lines of
> cast(to_number('0' || field::varchar, '999999999.') as int)
> might give the behaviour you're after, and a quick test seems to indicate
> that it's about 4x faster than the original function:

I'm actually flattered that I came across almost the same solution as
Tom with my proposal:
to_number('0'||mytextcolumn, '99999999999.000')::int

> ...
> Hopefully there's a cleaner way of writing that without a long list of 9s in the
> format string, and if the field is nullable I'd guess you probably need a
> coalesce(..., 0) around that as well.

Would be glad to find any cleaner way but that's the silver bullet until then:->

-Stefan