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

Casting Notasi Ilmiah (dari varchar -> numerik) dalam tampilan

Ada beberapa masalah yang berbeda semua datang bersama-sama di sini pada waktu yang sama. Mari kita lihat beberapa di antaranya:

  1. Anda memberikan angka sebagai DECIMAL (18, 18). Artinya adalah "beri saya nomor yang memiliki ruang untuk TOTAL 18 karakter, dan 18 di antaranya harus setelah desimal". Itu berfungsi dengan baik selama nomor Anda lebih kecil dari 0 (yang berlaku untuk semua nomor E) tetapi akan rusak jika Anda mencoba menggunakannya pada angka> 0. Untuk angka> 0, cukup masukkan sebagai DECIMAL tanpa menentukan hal lain .

  2. Dalam kasus di mana Anda menambahkan "KETIKA @d like '%E+%' THEN CAST(@d AS FLOAT)", Anda mendapatkan hasil yang berbeda untuk angka <0 karena mesin secara implisit memberikan hasil secara berbeda. Saya tidak tahu aturan tentang bagaimana sql server memutuskan untuk memberikan hasil KASUS, tetapi tampaknya membuat perubahan yang Anda usulkan menyebabkan mesin menyusunnya kembali dengan cara yang berbeda. Mentransmisikan hasil tersebut secara eksplisit sebagai desimal memperbaiki masalah.

  3. Anda perlu LTRIM dan RTRIM hasil Anda secara konsisten. Anda dapat menambahkan LTRIM dan RTRIM ke setiap pernyataan kasus, atau Anda dapat menambahkan LTRIM dan RTRIM saja pada hasil kasus.

Inilah solusi yang harus benar-benar menyelesaikan semuanya:

SELECT
    LTRIM(RTRIM(CASE 
        WHEN @d like '%E-%' THEN CAST(CAST(@d AS FLOAT) AS DECIMAL(18,18))
        WHEN @d like '%E+%' THEN CAST(CAST(@d AS FLOAT) AS DECIMAL)
        ELSE @d
    END))


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Salin tabel ubah nilai 1 kolom dan masukkan ke tabel yang sama

  2. Bergabunglah dengan tabel untuk dirinya sendiri

  3. Cara mengenkripsi semua prosedur tersimpan yang ada dari database

  4. Kerangka Entitas dan (1 ke banyak)-(banyak ke 1) (1 - * * - 1) relasi

  5. SQL Query yang berjalan dengan baik di SSMS berjalan sangat lambat di ASP.NET