SQL Server:将char转换为float并将其舍入

时间:2012-11-02 08:56:00

标签: sql sql-server

我有一个VARCHAR2类型的数据库,其值如下:398566,569885

我需要的是将此数字转换为float,然后使其看起来像:398566,56 将它投射到浮动是如此重要,如果可以修剪数字也可以。

我试过的是:

select
cast (p1.VALUE as float) as Total
from Workflow p
LEFT JOIN PA_PARAMETER p1 on p1.ID=p.ID AND p1.NAME = 'Total'
WHERE p.TYPE = 'Marketing'

有没有办法修剪这些数字或以某种方式对其进行舍入?

3 个答案:

答案 0 :(得分:3)

这将围绕您的数字

select cast(value as decimal(9,2)) 
from workflow...

答案 1 :(得分:2)

你可以做到

declare @a nvarchar(max)
select @a = '398566,569885'
select cast(@a as decimal(29, 2))

但是由于四舍五入,你会收到 398566.57 要获得 398566.56 ,您必须使用带有指定第三个参数的圆函数 - http://msdn.microsoft.com/en-us/library/ms175003.aspx(当指定了0以外的值时,将截断numeric_expression。)

select cast(round(cast(@a as decimal(29, 10)), 2, 1) as decimal(29, 2))

答案 2 :(得分:0)

根据我的收集,您只想将包含一些(欧洲)十进制文本的VARCHAR列重新格式化为2个位置。

select
left(p1.value, charindex(',', p1.value + ',')+2) as Total
from Workflow p
LEFT JOIN PA_PARAMETER p1 on p1.ID=p.ID AND p1.NAME = 'Total'
WHERE p.TYPE = 'Marketing';

如果你一直想要2位小数,那么

select
left(p1.value + ',00', charindex(',', p1.value + ',')+2) as Total
from Workflow p
LEFT JOIN PA_PARAMETER p1 on p1.ID=p.ID AND p1.NAME = 'Total'
WHERE p.TYPE = 'Marketing';