项目中需要写一规则,目的是判断数值的小数位数,可以分为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