将数据类型varchar转换为十进制错误, - 数据类型错误

时间:2015-03-09 23:46:23

标签: sql casting type-conversion ssms-2012

我正在改变一个视图,将地理坐标(具有不同小数精度的数字)转换为十进制字段。

我已确认源表中的唯一项目是数字和小数 - 但我收到错误

  

“将数据类型varchar转换为数字时出错。”

源表中的十进制是否可能被读取为字符,如果是,我该怎么做才能成功执行此转换?

ALTER VIEW [SCHEMA].[VIEW_V]
AS SELECT   
        cast(field 1 AS decimal (26,19)) as x_coord         
   FROM   [linkedServer].[Sourcedatabase].[schema].[dt_table]

2 个答案:

答案 0 :(得分:4)

尝试使用isnumeric()try_convert()

ALTER VIEW [SCHEMA].[VIEW_V] AS
    SELECT (CASE WHEN isnumeric(field1) = 1 
                 THEN cast(field1 AS decimal(26,19)) 
            END)as x_coord
    FROM   [linkedServer].[Sourcedatabase].[schema].[dt_table];

ALTER VIEW [SCHEMA].[VIEW_V] AS
    SELECT try_convert(decimal(26, 19), field1) 
    FROM   [linkedServer].[Sourcedatabase].[schema].[dt_table];

如果结果值为NULL,您将知道导致问题的行。

答案 1 :(得分:0)

对于带有字符“ e”“ +”的浮点值,如果我们尝试将其转换为十进制,则会出错。 ('2.81104e + 006')。它仍然通过了ISNUMERIC测试。

SELECT ISNUMERIC('2.81104e + 006')返回1。

SELECT convert(decimal(15,2),'2.81104e + 006')返回错误:将数据类型varchar转换为数值时出错。

SELECT try_convert(decimal(15,2),'2.81104e + 006')返回NULL。

SELECT convert(float,'2.81104e + 006')返回正确的值2811040。