Обсуждение: String concatenation work in version 8.2.11 and 8.3.6
hi,all
for example tableA
create table tableA (
id serial,
a integer,
b integer,
c integer
);
insert into tableA (a,b,c) values (12,34,56);
then,
select id from tableA where (a||b||c)=123456;
in postgresql version 8.2.11,it works.
but in postgresql version 8.3.6,the error as bellow:
ERROR: operator does not exist: integer || integer
LINE 1: select id from tableA where (a||b||c)=123456;
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
is it a bug in 8.2.11 or I install 8.3.6 not completely?
for example tableA
create table tableA (
id serial,
a integer,
b integer,
c integer
);
insert into tableA (a,b,c) values (12,34,56);
then,
select id from tableA where (a||b||c)=123456;
in postgresql version 8.2.11,it works.
but in postgresql version 8.3.6,the error as bellow:
ERROR: operator does not exist: integer || integer
LINE 1: select id from tableA where (a||b||c)=123456;
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
is it a bug in 8.2.11 or I install 8.3.6 not completely?
Hi Tony, Its not a bug - automatic casting was removed in 8.3. You should cast( a as text)||cast(b ... = cast(123456 as text). Other option is to define your own operators which is to be used only in case you can not fix clients of your database... Tony Liao rašė: > hi,all > for example tableA > create table tableA ( > id serial, > a integer, > b integer, > c integer > ); > insert into tableA (a,b,c) values (12,34,56); > > then, > select id from tableA where (a||b||c)=123456; > in postgresql version 8.2.11,it works. > but in postgresql version 8.3.6,the error as bellow: > ERROR: operator does not exist: integer || integer > LINE 1: select id from tableA where (a||b||c)=123456; > ^ > HINT: No operator matches the given name and argument type(s). > You might need to add explicit type casts. > > is it a bug in 8.2.11 or I install 8.3.6 not completely? -- Julius Tuskenis Programavimo skyriaus vadovas UAB nSoft mob. +37068233050
thanks,Julius.
2009/2/26 Julius Tuskenis <julius@nsoft.lt>
Hi Tony,
Its not a bug - automatic casting was removed in 8.3. You should cast( a as text)||cast(b ... = cast(123456 as text). Other option is to define your own operators which is to be used only in case you can not fix clients of your database...
Tony Liao rašė:--hi,all
for example tableA
create table tableA (
id serial,
a integer,
b integer,
c integer
);
insert into tableA (a,b,c) values (12,34,56);
then,
select id from tableA where (a||b||c)=123456;
in postgresql version 8.2.11,it works.
but in postgresql version 8.3.6,the error as bellow:
ERROR: operator does not exist: integer || integer
LINE 1: select id from tableA where (a||b||c)=123456;
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
is it a bug in 8.2.11 or I install 8.3.6 not completely?
Julius Tuskenis
Programavimo skyriaus vadovas
UAB nSoft
mob. +37068233050