我有一个表格,其中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
。
任何人都知道该怎么做?
答案 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