0

我有一个数据库,其中有一列VARCHAR2类型保持如下值:398566,569885

我需要的是将此数字转换为浮点数,然后使其看起来像: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'

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

4

3 回答 3

3

这将四舍五入你的数字

select cast(value as decimal(9,2)) 
from workflow...
于 2012-11-02T08:57:11.977 回答
2

你可以做

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

但是由于四舍五入,您将收到398566.57
要获得398566.56,您必须使用带有指定第三个参数的 round 函数 - 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))
于 2012-11-02T09:00:02.467 回答
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';
于 2012-11-02T09:22:53.400 回答