項目中需要寫一規則,目的是判斷數值的小數位數,可以分為2中情況、
1.直接以小數點為分界點,小數點后的數據表示小數的位數,此種情況比較簡單,直接使用CHARINDEX函數就可以搞定
其中CHARINDEX的用法自行找API
語法:select len(字段名)-CHARINDEX('.',字段名) from 表名
eg:select len(LDLC)-CHARINDEX('.',LDLC) from t_ld
2.由於SQL中一般在定義表時,就設定了表中數據的類型以及長度,那么數據不足此長度時,系統會在后面默認加0,那么直接通過方法1查詢小數位數就不准確,例如數據庫中本來存儲的數據為1.23,而在定義表時,定義其長度為3位,雖然認為看數據的時候是1.23,時間上通過len(xxx),其結果為3;還有一種情況就是用戶統計小數位數的時候,不想統計末尾的0,也就是數據為1.230時,用戶希望其小數位數2,即統計len(1.23)。基於上述需求,其代碼如下:
1 CreateFUNCTION [dbo].[getDecimalLenth]( @Number nvarchar(20)) 2 RETURNS nvarchar(20) 3 AS 4 begin 5 `WHILE RIGHT(@Number,1) =0 and CHARINDEX('.',@Number)>0 and left(RIGHT(@Number,2),1)<>'.' 6 BEGIN 7 Set @Number=LEFT(@Number,LEN(@Number)-1) 8 END 9 return case when CHARINDEX('.',@Number)>0 and right(@Number,1)<>0 10 then len(@Number)-CHARINDEX('.',@Number) 11 else 0 end 12 end