在SQL Server中将varchar转换为数字类型

时间:2014-08-12 22:35:02

标签: sql sql-server sql-server-2008-r2 sql-server-2012

我的表中有一列varchar数据类型。它在小数点后有15位数。现在我很难将它转换为数字格式.. float,double等。

有人有任何建议吗?

示例:

表1

    Column1
-------------------
-28.851540616246499
-22.857142857142858
-26.923076923076923
76.19047619047619

我尝试使用以下语句,但似乎不起作用:

update table1
set Column1 = Convert(float,column1)..

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用decimal data type并指定精度来说明小数点后面的位数。因此,您可以使用decimal(28,20),例如,它将包含28位数,其中20位小数点后。

这是一个SQL Fiddle,以十进制格式显示您的数据。

小提琴示例:

create table Table1(MyValues varchar(100))

insert into Table1(MyValues)
values                    
('-28.851540616246499'),
('-22.857142857142858'),
('-26.923076923076923'),
('76.19047619047619')

因此,这个值在此表中保持为varchar,但只要它们都是有效值,就可以将其强制转换为十进制,如下所示:

select cast(MyValues as decimal(28,20)) as DecimalValues 
from table1

您的样本

查看示例更新语句,您将无法将varchar中的值转换为数字类型并将它们重新插入到同一列中,因为该列的类型为{{1} }。最好添加一个带有数字数据类型的新列并更新它。

所以,如果你有2列:

varchar

您可以执行以下操作,使用已转换为十进制的create table Table1(MyValues varchar(100), DecimalValues decimal(28,20)) 值更新数字列:

nvarchar

答案 1 :(得分:1)

我认为您正在尝试实际更改该列的数据类型?

如果是这种情况,你想要改变表并将列类型改为浮点数,如下所示:

alter table table1
alter column column1 float

请参阅小提琴:http://sqlfiddle.com/#!6/637e6/1/0

如果要将文本值更改为在查询中临时使用的数字(而不是实际永久更改数据),则可以使用CONVERT。