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

我已经将我收到的excel文档导入到我的mssql数据库中。一切都很顺利,我有一个包含2列的7000条logging的表格。 现在我想join这个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获取导入为浮动,没有一种可能的方式来更改types。 上面的sql没有得到任何结果,即使我知道logging确实存在。 我相信我的浮动ID是存储在“0.00000”原始ID之后,这是为什么它不工作。

任何人都可以帮助我解决这个问题,请

所以我假设你的表中的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以允许与您的数据库表进行比较。

编辑:所以事实certificate,你的数字太大,不能转换为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));