我有一个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'
有没有办法修剪这些数字或以某种方式对其进行舍入?
答案 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';