Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để đếm số thập phân trong SQL?

Bạn có thể sử dụng một cái gì đó như sau:

declare @v sql_variant

set @v=0.1242311

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

Điều này sẽ trả về 7 .

Tôi đã cố gắng làm cho truy vấn trên hoạt động với float nhưng không thể làm cho nó hoạt động như mong đợi. Nó chỉ hoạt động với sql_variant như bạn có thể thấy tại đây: http://sqlfiddle.com/#!6/5c62c/ 2

Vì vậy, tôi đã tiếp tục tìm một cách khác và xây dựng dựa trên câu trả lời này , Tôi nhận được cái này:

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

Đây là SQL Fiddle để kiểm tra điều này: http://sqlfiddle.com/#!6/ 23d4f / 29

Để giải thích cho vấn đề nhỏ đó, đây là một phiên bản đã sửa đổi sẽ xử lý trường hợp giá trị float không có phần thập phân:

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

Đây là SQL Fiddle đi kèm: 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. Truy vấn hoạt động tối ưu cho bản ghi mới nhất cho mỗi N

  2. LEN () so với DATALENGTH () trong SQL Server

  3. Sử dụng Like trên một biến tham số?

  4. lấy một chuỗi được phân tách bằng dấu phẩy từ các hàng

  5. Vấn đề truy vấn Sql 2008 - LatLong nào tồn tại trong một đa giác địa lý?