PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL:ERROR:operator tidak ada:integer =karakter bervariasi

Saya pikir itu memberitahu Anda apa yang salah. Anda tidak dapat membandingkan bilangan bulat dengan varchar. PostgreSQL ketat dan tidak melakukan typecasting ajaib untuk Anda. Saya menduga SQLServer melakukan typecasting secara otomatis (yang merupakan hal yang buruk).

Jika Anda ingin membandingkan dua binatang yang berbeda ini, Anda harus melemparkan satu ke yang lain menggunakan sintaks casting :: .

Sesuatu seperti ini:

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 */
....;

Perhatikan varchar typecasting pada table1.col4.

Perhatikan juga bahwa typecasting mungkin membuat indeks Anda pada kolom itu tidak dapat digunakan dan memiliki penalti kinerja, yang sangat buruk. Solusi yang lebih baik lagi adalah melihat apakah Anda dapat mengubah salah satu dari dua jenis kolom secara permanen agar sesuai dengan yang lain. Ubah desain basis data Anda.

Atau Anda dapat membuat indeks pada nilai yang dicor dengan menggunakan tidak dapat diubah . khusus fungsi yang memberikan nilai pada kolom. Tapi ini juga mungkin terbukti kurang optimal (tetapi lebih baik daripada casting langsung).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Siapkan terowongan SSH dengan Paramiko untuk mengakses PostgreSQL

  2. Array pad dengan NULL hingga panjang maksimum untuk fungsi agregat khusus

  3. Menutup koneksi database Di Laravel 5.1

  4. Cara Mengonversi Stempel Waktu Unix ke Nilai Tanggal/Waktu di PostgreSQL

  5. Kolom byte Postgres mengembalikan string (array char) alih-alih byte array