SQL Server:将数据类型nvarchar转换为数字时出错

时间:2015-10-21 08:22:48

标签: sql-server type-conversion

如果我在下面运行SQL查询;我收到以下错误:

  

将数据类型nvarchar转换为数字时出错。

COLUMNA仅包含数字(负数和正数),包括小数点后最多两位数的字段,并存储为点小数。

IF OBJECT_ID('st00_TABLEA','U') IS NOT NULL DROP TABLE [st00_TABLEA]
SELECT 
    COLUMNA AS COLUMNA_s
    ,CASE WHEN [COLUMNA] = '' THEN 0 ELSE CONVERT(NUMERIC(18,2),REPLACE([COLUMNA],',','.')) END AS COLUMNA
INTO st00_TABLEA
FROM dbosu.TABLEA;

我也尝试了以下方法,但仍然存在同样的问题:

IF OBJECT_ID('st00_TABLEA','U') IS NOT NULL DROP TABLE [st00_TABLEA]
SELECT 
    COLUMNA AS COLUMNA_s
    ,CONVERT(DECIMAL(18,2),COLUMNA) AS COLUMNA
INTO st00_TABLEA
FROM dbosu.TABLEA;

3 个答案:

答案 0 :(得分:20)

您可能需要修改列中的数据,但无论如何您可以执行以下操作之一: -

1-检查它是否为数字然后将其转换为其他值,如0

Select COLUMNA AS COLUMNA_s, CASE WHEN Isnumeric(COLUMNA) = 1
THEN CONVERT(DECIMAL(18,2),COLUMNA) 
ELSE 0 END AS COLUMNA

2-仅选择列中的数值

SELECT COLUMNA AS COLUMNA_s ,CONVERT(DECIMAL(18,2),COLUMNA) AS COLUMNA
where Isnumeric(COLUMNA) = 1

答案 1 :(得分:3)

对于带有字符“ 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

答案 2 :(得分:1)

从nvarchar转换为float时遇到了此错误。
我要做的是在nvarchar字段上使用LEFT函数。

示例:Left(Field,4)

基本上,查询将如下所示:

Select convert(float,left(Field,4)) from TABLE

可笑的是,SQL会将它复杂化到这种程度,而使用C#却很容易!
希望它可以帮助某个人。