我有一个平面文件,我使用导入向导加载到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.
知道造成这种情况的原因是什么?
答案 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