在工作中遇到,一个多表联合查询的情况,查询出来的有些字段精度太高,小数点后达到8个0,现在客户要求报表只要精确到0.01 ,就是只要小数点后面只要保存两位,另外还需要四舍五入
在网上找了点资料,自己测试了下,下面给大家分享下:
---创建一个测试表
USE test
CREATE TABLE studentscore
(
id INT IDENTITY(1,1) PRIMARY KEY ,
Score VARCHAR(20)
)
下面是截图,插入这些数据
![SQL Server 中字段的精度问题 SQL Server 中字段的精度问题](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UY3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5OHhNVEV3TkRVNEx6SXdNVGN3Tnk4eE1URXdORFU0TFRJd01UY3dOekkzTVRRME5UVTBOelU0TFRFNE1ERXdOVGN6TWpVdWNHNW4uanBn.jpg?w=700&webp=1)
1.不改变表中的值,只在查询时显示,四舍五入只保留两位小数
select Convert(decimal(18,2), Score) from studentscore
执行结果:
![SQL Server 中字段的精度问题 SQL Server 中字段的精度问题](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UY3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5OHhNVEV3TkRVNEx6SXdNVGN3Tnk4eE1URXdORFU0TFRJd01UY3dOekkzTVRRMU1UQTNNakV4TFRFek1EY3dPREEzTXpFdWNHNW4uanBn.jpg?w=700&webp=1)
2.直接更新表中的值,四舍五入只保留两位小数
update studentscore set Score = cast(cast(round(Score,2) as float ) as varchar)
where charindex('.',REVERSE(cast(Score as varchar(50))))-1>3
更新后的数据库:
![SQL Server 中字段的精度问题 SQL Server 中字段的精度问题](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhCekwybHRZV2RsY3pJd01UY3VZMjVpYkc5bmN5NWpiMjB2WW14dlp5OHhNVEV3TkRVNEx6SXdNVGN3Tnk4eE1URXdORFU0TFRJd01UY3dOekkzTVRRMU5USXlNVGd3TFRFeU5ETTVNVEk1T0RjdWNHNW4uanBn.jpg?w=700&webp=1)