将varchar转换为浮动或周围的方式

时间:2016-05-04 13:36:26

标签: sql excel casting

我已经将我收到的excel文档导入到我的mssql数据库中.. 一切都很顺利,我有一张包含2列的7000条记录。 现在我想加入这个excel表和我数据库中已有的表来比较我存储在那里的一些数据:

SELECT  b.ID, a.ID , b.NAME   
FROM ExcelTable b
inner join DB_Table a
on a.ID = cast(b.ID as varchar)

我的数据库中的ID存储为VARCHAR(20),ExcelTable ID作为浮点数导入,但无法更改类型。上面的sql根本没有得到任何结果,即使我知道记录确实存在。 我相信我的浮动ID在原始ID之后以“.00000”存储,这就是为什么它不起作用。

有人可以帮我解决这个问题吗

1 个答案:

答案 0 :(得分:1)

所以我假设表中的ID是整数?在这种情况下,这应该有效:

SELECT  
    b.ID, 
    a.ID, 
    b.NAME   
FROM 
    ExcelTable b
    INNER JOIN DB_Table a ON CONVERT(INT, a.ID) = CONVERT(INT, b.ID);

如果您的数据库表中有任何非数字,那么这将失败,因为您将收到有关将VARCHAR转换为INT的错误。如果是这种情况,那么你可能会逃避:

SELECT  
    b.ID, 
    a.ID, 
    b.NAME   
FROM 
    ExcelTable b
    INNER JOIN DB_Table a ON a.ID = CONVERT(VARCHAR(50), CONVERT(INT, b.ID));

现在我们将浮点数转换为整数,它将从“.0000”部分中删除,然后将其转换为VARCHAR以允许与数据库表进行比较。

编辑:事实证明你的数字太大而无法转换为INT,所以请尝试使用BIGINTs:

SELECT  
    b.ID, 
    a.ID, 
    b.NAME   
FROM 
    ExcelTable b
    INNER JOIN DB_Table a ON a.ID = CONVERT(VARCHAR(25), CONVERT(BIGINT, b.ID));