TSQL Get Number of Decimal Place Digit – TSQL 找出數據有多少個小數位是有數值的

在之前一個網誌介紹過用TSQL 找出多過2個小數位的record

Check if TSQL field has contain more than 2 decimal place — TSQL上查看欄位上的有沒有多過2個小數位的資料 

今天想和大家介紹一個自己寫的功能..
用來方便找出數據上有多才個小數位是有數值的
E.G.
0.1234 = 4個小數位
0.1200 = 2個小數位

以下是我簡單的功能 Get_NoOfDecimalPlaceDigit

-- =============================================
-- Author:		<ShareChiWai>
-- Create date: <2012-09-20>
-- Description:	<This function is used to retrive the number of decimal place digit the given value have>
-- =============================================
CREATE FUNCTION [dbo].[Get_NoOfDecimalPlaceDigit]
    (
    ---- 首先declare一個parameter做input
      @FieldValue AS DECIMAL(19, 6) = 0
    )
    ---- 輸出的結果是有多少個小數位值..所以是Integer
RETURNS INT
AS
    BEGIN
    ---- 很複雜的一個TSQL... 我用了STR input parameter來把數據轉成了6個小數位的decimal 的string
    ---- 之後再找出小數位... 再用RIGHT 去取得所有小數位值...再把他轉做INT
    ---- 用reverse去去除0的餘值...
      DECLARE @DecimalValue AS INT = CAST(REVERSE(RIGHT(STR(@FieldValue, 20,
                                                              6),
                                                          LEN(STR(@FieldValue,
                                                              20, 6))
                                                          - CHARINDEX('.',
                                                              STR(@FieldValue,
                                                              20, 6)))) AS INT)

    ----轉出結果..如果是0的話輸出0.. otherwise輸出數字有多少個數位
    ---- 便找到數據上有多才個小數位是有數值的
        RETURN  CASE WHEN @DecimalValue  = 0     THEN 0
             ELSE LEN(@DecimalValue)
        END
  END
 

E.G.

 SELECT dbo.Get_NoOfDecimalPlaceDigit(12.35012)
 ---- 結果是5

SELECT dbo.Get_NoOfDecimalPlaceDigit(12.0000)
 ---- 結果是0

Hope you find it useful

Drag and Drop upload file and tag file with filename and correct path…etc

Media query for different device

Leave a Reply