sql server格式化数字

作者:袖梨 2022-06-29

用sql语句来格式化double型的数据,比如,只取出小数点后面的两位
一。主要方法

--取小数位前数字,不考虑四舍五入
select left('30000.72234', charindex('.', '30000.72234')-1)
其中:charindex('.', '30000.72234')获得小数点的位置;-1则表示在小数点前面的全部,如果想获取小数点后面的n为,写成+n就可以了。还挺好用的。

--每三位用逗号相隔,留2位小数,不考虑四舍五入
select convert(varchar, cast(round(30000.72234,0) as money), 1)

--每三位用逗号相隔,不留小数位,考虑四舍五入
select left(convert(varchar, cast(round(30000.72234,0) as money), 1) , charindex('.', convert(varchar, cast(round(30000.72234,0) as money), 1))-1)


二。CAST和 ROUND的比较
1.
SELECT CAST('123.456' as decimal)  将会得到 123(小数点后面的将会被省略掉)。
如果希望得到小数点后面的两位。
则需要把上面的改为
SELECT CAST('123.456' as decimal(38, 2))

===>123.46
自动四舍五入了!

2.
SELECT ROUND(123.75633, 2, 1),
ROUND(123.75633, 2)
上面的SQL得到的2个值是不一样的,前一个是:123.75000,后一个是:123.76000。
因为前者在进行四舍五入之前,小数点后已经被截取,保留了2位。
而后者则没有被截取,四舍五入时自然就会得到123.76000

示例图1:

示例图2:
sql语句如下:
SELECT CONVERT(VARCHAR(15),CAST(CONVERT(DECIMAL(12,2),LTRIM(PREPAY)) AS MONEY),1) PREPAY_V,PREPAY  FROM INVOICEHD
go
格式:CONVERT(VARCHAR(15),CAST(CONVERT(DECIMAL(12,2),LTRIM(数据库教程字段名)) AS MONEY),1)
注意事项:
SELECT CONVERT(VARCHAR(100),CAST(CONVERT(DECIMAL(38,2),LTRIM('111111111111111.00')) AS MONEY),1) money
SELECT CONVERT(VARCHAR(100),CAST(CONVERT(DECIMAL(38,2),LTRIM('111111111111111.00')) AS MONEY),1) money

相关文章

精彩推荐