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

Bagaimana cara menghitung tempat desimal dalam SQL?

Anda dapat menggunakan sesuatu seperti ini:

declare @v sql_variant

set @v=0.1242311

select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale

Ini akan mengembalikan 7 .

Saya mencoba membuat kueri di atas berfungsi dengan float kolom tetapi tidak dapat membuatnya berfungsi seperti yang diharapkan. Ini hanya bekerja dengan sql_variant kolom seperti yang Anda lihat di sini:http://sqlfiddle.com/#!6/5c62c/ 2

Jadi, saya melanjutkan untuk menemukan cara lain dan membangun jawaban ini , saya mendapatkan ini:

SELECT value,
LEN(
    CAST(
         CAST(
              REVERSE(
                      CONVERT(VARCHAR(50), value, 128)
                     ) AS float
             ) AS bigint
        )
   ) as Decimals
FROM Numbers

Berikut adalah SQL Fiddle untuk mengujinya:http://sqlfiddle.com/#!6/ 23d4f/29

Untuk menjelaskan kekhasan kecil itu, inilah versi modifikasi yang akan menangani kasus ketika nilai float tidak memiliki bagian desimal:

SELECT value,
       Decimals = CASE Charindex('.', value)
                    WHEN 0 THEN 0
                    ELSE
           Len (
            Cast(
             Cast(
              Reverse(CONVERT(VARCHAR(50), value, 128)) AS FLOAT
                 ) AS BIGINT
                )
               )
                    END
FROM   numbers

Berikut SQL Fiddle yang menyertainya:http://sqlfiddle.com/#!6/10d54/11



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. daftar yang dipisahkan koma sebagai string tunggal, T-SQL

  2. Bagaimana Anda melakukan Multiple Inner Joins di Linq to Entities

  3. Bagaimana memulihkan database dari C#

  4. Apakah Eksekusi Prosedur Tersimpan T-SQL 'atomik'?

  5. Menggabungkan nilai berdasarkan ID