Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kembalikan baris di mana ID berada dalam string yang dipisahkan titik koma dari subquery MSSQL

Ini adalah contoh lain dari pentingnya menormalkan data Anda.
Menyimpan beberapa titik data dalam satu kolom hampir tidak pernah merupakan desain yang benar, dan maksud saya hampir tidak pernah sekitar 99,9999%.

Jika Anda tidak dapat menormalkan database Anda, Anda dapat menggunakan solusi seperti ini:

SELECT * 
FROM Projects p
WHERE EXISTS (
    SELECT Project_ID 
    FROM Feedback F WHERE ID = 268 
    AND Project_ID IS NOT NULL
    AND ';'+ F.Project_ID +';' LIKE '%;'+ CAST(p.Project_ID as varchar) +';%'
)

Anda tidak dapat menggunakan IN operator karena mengharapkan daftar nilai yang dibatasi oleh koma, sementara Anda mencoba menyediakannya dengan satu nilai yang dibatasi oleh titik koma. Bahkan jika nilai dalam Project_ID dibatasi oleh koma, itu tetap tidak akan berfungsi.

Alasan saya menambahkan ; di setiap sisi Project_ID di kedua tabel adalah dengan cara ini LIKE operator akan mengembalikan true untuk lokasi mana pun ia menemukan Projects.Project_Id di dalam Feedback.Project_Id . Anda harus menambahkan ; ke Projects.Project_Id untuk mencegah LIKE untuk mengembalikan true ketika Anda mencari angka yang sebagian cocok dengan angka dalam string yang dibatasi. Pertimbangkan untuk mencari 12 dalam string yang berisi 1;112;455 - tanpa menambahkan pembatas ke nilai pencarian (12 dalam contoh ini) LIKE operator akan mengembalikan true .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. dapatkan string yang dipisahkan koma dari baris

  2. Berapa ukuran yang Anda gunakan untuk varchar(MAX) dalam deklarasi parameter Anda?

  3. Desain basis data:Menghitung Saldo Akun

  4. ExecuteReader membutuhkan Koneksi yang terbuka dan tersedia. Status koneksi saat ini adalah Menghubungkan

  5. Bagaimana cara memasukkan pandas DataFrame ke tabel Microsoft SQL Server?