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

kesalahan mengonversi varchar ke float

Ini berarti Anda memiliki setidaknya satu baris dalam tabel yang tidak dapat dilemparkan ke float . Melakukan CASE aman, tetapi menggabungkan CTE dan menambahkan klausa WHERE merupakan kesalahan umum programmer saat menulis T-SQL:urutan deklarasi menyiratkan urutan eksekusi . Pemrogram terbiasa dengan gaya prosedural imperatif seperti bahasa C dan gagal memahami sifat SQL berbasis set deklaratif. Saya telah menulis sebelumnya tentang masalah ini dan memberikan contoh ketika kesalahan menyebabkan kesalahan:

Setelah Anda memposting kode lengkap Anda, kami dapat melihat di mana tepatnya Anda membuat kesalahan dalam kasus Anda dan mengasumsikan urutan eksekusi tertentu.

setelah pembaruan

OK, jadi saya harus admin bahwa dalam kasus Anda kodenya benar dalam urutan eksekusi, result kolom tidak dapat diproyeksikan tanpa terlebih dahulu mengevaluasi CASE . Seandainya CASE berada dalam klausa WHERE, semuanya akan berbeda.

Masalah Anda berbeda:ISNUMERIC . Fungsi ini memiliki pemahaman yang sangat baik tentang apa NUMERIC berarti dan telah menggigit banyak pengembang sebelumnya. Yaitu, ia menerima nilai yang akan ditolak oleh CAST dan CONVERT. Seperti yang mengandung koma:

declare @n varchar(8000) = '1,000';
select isnumeric(@n);
select cast(@n as float);
select case when isnumeric(@n)=1 then cast(@n as float) else null end;

Jadi, Anda memiliki nilai yang melewati ISNUMERIC tes tetapi gagal untuk mengkonversi. Perlu diketahui, semakin Anda menggali pendekatan ini, semakin banyak pintu tertutup yang akan Anda temukan. Tidak ada cara aman untuk melakukan pemeran yang Anda butuhkan di sisi server. Idealnya, perbaiki model data (jadikan bidang mengambang jika menyimpan float). Singkat dari itu, triase data dan hapus semua nilai yang bukan float yang tepat, dan perbaiki front-end/aplikasi untuk tidak lagi memperkenalkan yang baru, lalu tambahkan batasan yang akan memicu kesalahan jika nilai buruk baru muncul. Anda tidak akan dapat menyelesaikan ini dalam sebuah kueri, jalan itu penuh dengan mayat.

Dengan versi SQL Server berikutnya Anda akan memiliki fungsi baru, TRY_CONVERT , itu akan menyelesaikan masalah Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memigrasi Pekerjaan SQL Server Dari Satu Instance SQL Server Ke Yang Lain

  2. Cara Mengembalikan Jumlah Baris dalam Hasil Query di SQL Server

  3. SQL tambahkan filter hanya jika variabel bukan nol

  4. Forum Kinerja SQL Server Terbaik untuk Bantuan pada Pertanyaan Terberat

  5. Pencarian teks lengkap tidak berfungsi jika kata berhenti disertakan meskipun daftar kata berhenti kosong