SQL Server判断小数位数

项目中需要写一规则,目的是判断数值的小数位数,可以分为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
posted @ 2017-11-13 16:42  光头才能强  阅读(9438)  评论(0编辑  收藏  举报