Sql 将数据类型varchar转换为decimal时出错,--数据类型错误
我正在修改一个视图,将地理坐标(十进制精度不同的数字)转换为十进制字段 我已经确认了源表中唯一的项是数字和小数,但是我得到了错误 “将数据类型varchar转换为数字时出错。” 是否可能源表中的小数点被读取为字符,如果是,我该如何成功执行此转换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]
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];