我已经将我收到的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”存储,这就是为什么它不起作用。
有人可以帮我解决这个问题吗
答案 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));