SQL Server - 将字符串转换为浮点数,并显示N / A

时间:2017-07-12 17:58:20

标签: sql sql-server tsql

我有一个平面文件,我使用导入向导加载到SQL Server。所有列都存储为nchar(50)。

我现在正试图将表转换为具有各种类型的新表(char,float,int等)。

有一列我想转换为float但它包含N / A字符串。

我检查过没有任何其他奇怪的字符串使用它:

SELECT col1, count(*)
from tab1
where ISNUMERIC(col1) <> 1
group by col1

然后我写了一个CASE语句进行转换:

SELECT CASE WHEN col1 = 'N/A' THEN NULL ELSE CAST(col1 AS FLOAT) END col1
INTO tab2
FROM tab1

但我收到此错误消息:

Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float.

知道造成这种情况的原因是什么?

4 个答案:

答案 0 :(得分:5)

如果2012+使用try_convert()

SELECT col1, count(*)
from tab1
where try_convert(float,col1) is null
group by col1

答案 1 :(得分:4)

如果你想忽略无效的字符浮动,你可以使用try_convert

Select try_convert(float, col1) as col1 from yourtable

答案 2 :(得分:2)

小心使用ISNUMERIC()。它可以返回一些误报。例如......

select isnumeric('$')
select isnumeric('1e4') 

这应该会告诉你导致错误的原因。

select * from table where column like '%[^0-9\.]%' escape '\'

您可以在where子句中使用它,或使用TRY_CONVERT()

答案 3 :(得分:1)

您没有进行从String到float的类型转换。在SQL语句中,您需要将原始列类型从nvarchar显式转换为float。这样的事情可能有用:

SELECT
    CASE
        WHEN col1 = 'N/A' THEN NULL
        ELSE CAST(col1 AS FLOAT) 
    END col1
INTO tab2
FROM tab1