MS SQL Server中如何检查Decimal(10,6)列千分位及后小数位非0?
在MS SQL Server中检查Decimal(10,6)列的千分位及之后小数位是否非零
方法一:数学运算(推荐)
通过数值计算直接判断千分位之后的小数部分是否大于0,精度可靠,无字符串格式风险:
SELECT * FROM YourTable WHERE YourDecimalCol * 1000 - FLOOR(YourDecimalCol * 1000) > 0;
原理:将数值乘以1000后,FLOOR()会提取到千分位为止的整数部分,两者的差值就是原数值千分位之后的小数部分。若差值大于0,说明千分位及之后存在非零数字。
方法二:字符串处理
将数值格式化为固定6位小数的字符串,截取小数点后第3到第6位的内容,判断是否不全为0:
SELECT * FROM YourTable WHERE SUBSTRING(STR(YourDecimalCol, 16, 6), CHARINDEX('.', STR(YourDecimalCol, 16, 6)) + 3, 3) != '000';
原理:STR(YourDecimalCol, 16, 6)确保数值被格式化为包含6位小数的字符串,通过CHARINDEX定位小数点位置,截取其后第3位开始的3个字符(对应原数值的千分位、万分位、十万分位),若这部分不是000则说明存在非零数字。
验证示例
- 1.123456:差值为0.456>0,匹配查询
- 1.120000:差值为0,不匹配查询
- 1.000000:差值为0,不匹配查询
- 1.000001:差值为0.001>0,匹配查询
内容的提问来源于stack exchange,提问作者Matt Ward
相关产品推荐
相关产品推荐

