Re: CVS to In_list without dynamic SQL, how?

From: Corey Huinker <corey(dot)huinker(at)gmail(dot)com>
To: Michael Moore <michaeljmoore(at)gmail(dot)com>
Cc: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>, postgres list <pgsql-sql(at)postgresql(dot)org>
Subject: Re: CVS to In_list without dynamic SQL, how?
Date: 2015-12-09 21:57:39
Message-ID: CADkLM=fh8XseWwC9nWwEW4KxzLDGdpjGKVYgiuGVw-6LbwH0Ww@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

On Wed, Dec 9, 2015 at 4:30 PM, Michael Moore <michaeljmoore(at)gmail(dot)com>
wrote:

> Very nice!
> In my case the value being compared is numeric. I tried:
> SELECT to_char( 1 , '999') = ANY( string_to_array('1,2,3,4,5', ','));
> but the result is FALSE
>

to_char returns a string. In this case, your spec has explicitly stated
that the string must be 3 characters wide.

# select 'X' || to_char(1,'999') || 'X';
?column?
----------
X 1X
(1 row)

'1' is not 3 characters wide. ' 1' <> '1'.

Skipping the forced formatting, you get the answer you want:

SELECT 1::text = ANY( string_to_array('1,2,3,4,5', ','));
?column?
----------
t
(1 row)

Similarly you do the comparison with integers, you'll get happy results:

# SELECT 1 = ANY( string_to_array('1,2,3,4,5', ',')::integer[]);
?column?
----------
t
(1 row)

# SELECT 6 = ANY( string_to_array('1,2,3,4,5', ',')::integer[]);
?column?
----------
f
(1 row)

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Christopher Molnar 2015-12-09 21:59:16 Regexp_replace question/assistance needed
Previous Message Christopher Molnar 2015-12-09 21:57:35 regexp_replace question/suggestions needed