sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:ERROR:operator bestaat niet:integer =karakter variërend

Ik denk dat het je precies vertelt wat er mis is. Je kunt een geheel getal niet vergelijken met een varchar. PostgreSQL is streng en doet geen magische typecasting voor u. Ik vermoed dat SQLServer automagisch typecast doet (wat een slechte zaak is).

Als je deze twee verschillende beesten wilt vergelijken, moet je de ene naar de andere casten met behulp van de casting-syntaxis :: .

Iets in de trant van:

create view view1
as 
select table1.col1,table2.col1,table3.col3
from table1 
inner join
table2 
inner join 
table3
on 
table1.col4::varchar = table2.col5
/* Here col4 of table1 is of "integer" type and col5 of table2 is of type "varchar" */
/* ERROR: operator does not exist: integer = character varying */
....;

Let op de varchar typecasting op table1.col4.

Houd er ook rekening mee dat typecasting uw index op die kolom mogelijk onbruikbaar kan maken en een prestatiestraf heeft, wat behoorlijk slecht is. Een nog betere oplossing zou zijn om te kijken of u een van de twee kolomtypen permanent kunt wijzigen zodat deze overeenkomt met de andere. Verander letterlijk uw database-ontwerp.

Of u kunt een index maken op de gegoten waarden met behulp van een aangepaste, onveranderlijke functie die de waarden op de kolom cast. Maar ook dit kan niet optimaal zijn (maar beter dan live casten).




  1. Oplossing:"SQLServerAgent is momenteel niet actief ..."

  2. Visual c++ 2008 verbinden met MySql

  3. SELECTEER alle nieuwste record-onderscheidende trefwoorden met een niet-null-waarde in één kolom

  4. Kun je een For Each Row-lus maken met MySQL?