数据类型varchar为数字

时间:2013-10-04 16:28:02

标签: sql sql-server

我有一个表格,其中Varchar值是数字,我希望它们是十进制值。我收到错误说错误将数据类型varchar转换为数字。我试过了:

SELECT ROUND(CAST(MYCOLUMN AS decimal(10, 2)), 2)

FROM TABLE

ALTER TABLE MYTABLE


ALTER  COLUMN MYCOLUMN DECIMAL(10,2)

ALTER TABLE MYTABLE


MODIFY COLUMN ACQ_FIELD_8 DECIMAL(10,2)

SELECT ISNULL(CAST(NULLIF(MYCOLUMN, 'NULL') AS NUMERIC(10,2)), 0)

FROM MYTABLE

我一直得到同样的错误。我查看了数据以查找任何特殊字符或字母:

SELECT MYCOLUMN FROM MYTABLE

WHERE MYCOLUMN LIKE '%[a-zA-Z]%'

or MYCOLUMN LIKE '%[(]%'  --etc for each character.

我发现的唯一一点是,由于某种原因,每个值都有一个'^',但是当我用什么都替换'6'时,该值仍然无法转换为十进制或数字。如果我尝试按编号(<0.00)对列进行排序,我会得到Arithmetic overflow error converting varchar to data type numeric

任何人都知道该怎么做?

2 个答案:

答案 0 :(得分:1)

试试这个:

select round(try_convert(decimal(10,2), Mycolumn),2)

看起来你有一些无法转换为十进制的值。 try_convert会将它们转换为NULL

答案 1 :(得分:1)

您可以尝试使用isnumeric:

SELECT ROUND(CAST(MYCOLUMN AS decimal(10, 2)), 2)
FROM TABLE
WHERE isnumeric(MYCOLUMN) = 1