sql 查询尾差(去尾0后小数点的位数)

最近有需要查询出现在数据库中有尾差的小数,就比如小数位保留2位,正常应该是666.120000,但是计算时有时会出现这样的情况:666.129999或是666.120060,正常应该是需要四舍五入的。
现在要查询出现尾差的小数,写了如下函数,在此记录下:
使用的是SQL Server数据库

--@inValue:小数值
--@length:保留的小数位数
ALTER FUNCTION [dbo].[CheckTailDiff](@inValue DECIMAL(23,10), @length INT)
RETURNS INT
AS
BEGIN

DECLARE @retValue INT
DECLARE @SrcValue VARCHAR(50)
DECLARE @MidValue VARCHAR(20)

--转换小数为字符串
SET @SrcValue=CAST(@inValue AS VARCHAR(20))

IF SUBSTRING(REVERSE(@SrcValue),PATINDEX('%[^0]%',REVERSE(@SrcValue)),1)='.'--小数部分全部为0时
    set @MidValue =''
ELSE
    set @MidValue =LEFT(@SrcValue,LEN(@SrcValue)- PATINDEX('%[^0]%.%',REVERSE(@SrcValue))+1)

SET @retValue=0;
IF @MidValue<>''
BEGIN
	SET @retValue=LEN(@MidValue) - CHARINDEX('.', @MidValue)
END

RETURN @retValue
END

使用如下:

SELECT dbo.CheckTailDiff(77441.1200000060,2)

假如应该是两位小数,如果是77441.1200000000,返回值是2(去尾0的小数位数),表明数据是正常的,没有尾差;

如果是77441.1200000060,返回值是9(去尾0的小数位数),表明数据有尾差;

把这个函数嵌入到查询语句中就可以查询有尾差的值了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值