0

我有一个带有数字的 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.

有谁知道该怎么做?

4

2 回答 2

1

你可以试试isnumeric:

SELECT ROUND(CAST(MYCOLUMN AS decimal(10, 2)), 2)
FROM TABLE
WHERE isnumeric(MYCOLUMN) = 1
于 2013-10-04T19:03:10.950 回答
1

尝试这个 :

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

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

于 2013-10-04T17:04:23.930 回答