我的表中有一列varchar
数据类型。它在小数点后有15位数。现在我很难将它转换为数字格式.. float,double等。
有人有任何建议吗?
示例:
表1
Column1
-------------------
-28.851540616246499
-22.857142857142858
-26.923076923076923
76.19047619047619
我尝试使用以下语句,但似乎不起作用:
update table1
set Column1 = Convert(float,column1)..
有什么建议吗?
答案 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。