Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将数据类型varchar转换为decimal时出错,--数据类型错误_Sql_Casting_Type Conversion_Ssms 2012 - Fatal编程技术网

Sql 将数据类型varchar转换为decimal时出错,--数据类型错误

Sql 将数据类型varchar转换为decimal时出错,--数据类型错误,sql,casting,type-conversion,ssms-2012,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]

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

我已经确认了源表中唯一的项是数字和小数,但是我得到了错误

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

是否可能源表中的小数点被读取为字符,如果是,我该如何成功执行此转换

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

尝试使用
isnumeric()
尝试转换()


如果结果值为
NULL
,您将知道是哪些行导致了问题。

尝试使用
isnumeric()
try\u convert()


如果结果值为
NULL
,您将知道是哪些行导致了问题。

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

选择ISNUMERIC('2.81104e+006')返回1

选择convert(十进制(15,2),'2.81104e+006')返回错误:将数据类型varchar转换为数字时出错

选择try_convert(十进制(15,2),'2.81104e+006')返回NULL


选择convert(float,'2.81104e+006'),它将返回正确的值2811040

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

选择ISNUMERIC('2.81104e+006')返回1

选择convert(十进制(15,2),'2.81104e+006')返回错误:将数据类型varchar转换为数字时出错

选择try_convert(十进制(15,2),'2.81104e+006')返回NULL


选择convert(float,'2.81104e+006'),它将返回正确的值2811040

您可能认为所有的值都是数字,但SQL Server更清楚。您可能会遇到各种问题,很可能是字段中的非数字字符。这两台机器上可能有不同的国际化设置,因此逗号或句点会被拒绝。我认为这是一个数据问题,而不是SQL问题。您可能认为所有的值都是数字,但SQL Server更清楚。您可能会遇到各种问题,很可能是字段中的非数字字符。这两台机器上可能有不同的国际化设置,因此逗号或句点会被拒绝。我认为这是一个数据问题,而不是SQL问题。
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];