Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

? LIKE (kolom || '%')

Kueri:

SELECT * FROM table WHERE ? LIKE (col || '%');

dapat ditulis ulang sebagai (Postgres dan MySQL):

SELECT * FROM table WHERE col = left(?, length(col));

Seperti yang dikomentari, formulir pertama harus berfungsi juga. Ini bisa rumit, karena karakter dengan arti khusus untuk LIKE (setidaknya _%\ ) di kolom harus melarikan diri. Jika Anda ingin bekerja dengan MySQL dan Postgres, Anda harus mengamati karakter khusus di kedua implementasi. Jadi formulir ke-2 jauh lebih sedikit rawan kesalahan pada kepala sekolah.

Kinerja

Tak satu pun dari kueri ini dapat menggunakan indeks pada col , keduanya tidak sargable . Masalahnya dapat dinilai kembali sebagai menemukan semua kemungkinan awalan untuk pola pencarian yang diberikan ? , yang dapat dioptimalkan dengan cara yang sama seperti dalam jawaban terkait ini (untuk Postgres) di dba.SE:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Penyamaran keluaran MySQL (yaitu nomor telepon, SSN, dll. pemformatan tampilan)

  2. Java - Mendapatkan Data dari database MySQL

  3. cara menambahkan tanggal ke log kesalahan mysql

  4. Memilih Baris Acak di MySQL

  5. Bagaimana cara menguji apakah suatu string adalah JSON atau bukan?