2016-05-04 2 views
0

Я импортировал документ Excel, который получил в мою базу данных mssql. Все прошло отлично, и у меня есть таблица с 7000 записями, состоящими из 2 столбцов. Теперь я хочу присоединиться к этой таблице первенствовать с уже существующей таблицы в моей базе данных, чтобы сравнить некоторые данные, я там хранятся:Преобразование varchar в float или наоборот

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

Идентификационные в моей базе данных хранятся как VARCHAR (20) и ExcelTable ID получать импортированные как плавающие без возможности изменения типа. Выше sql не дает мне никаких результатов вообще, хотя я знаю, что записи существуют. Я считаю, что мои идентификаторы с плавающей точкой хранятся с «.00000» после оригинального идентификатора, поэтому он не работает.

Может кто-нибудь помочь мне решить эту проблему, пожалуйста,

+0

закиньте VARCHAR как поплавок вместо литья поплавок как VARCHAR в вашем сравнении? Другими словами, измените предложение «on» на «on cast (a.Id AS float) = b.ID». –

+0

Привет, я пробовал, и я получаю эту ошибку. Ошибка преобразования типа данных varchar в float. – MishMish

ответ

1

Так я предполагаю, что идентификаторы в ваших таблицах являются целыми числами? В этом случае это должно работать:

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, чтобы сравнение с таблицей базы данных.

EDIT: Так получается, что ваши цифры слишком велики, чтобы быть преобразованы в 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)); 
+0

Привет, Ричард благодарен за ваш ответ. Идентификатор не является реальным идентификатором таблицы, а на DB_Table это varchar (25), а в таблице excel это тип float. Когда я попробую ваш метод, я получаю следующую ошибку: Ошибка арифметического переполнения для типа int, значение = 3490001445329.000000. Я считаю, что проблема - «.000000». запятая и нули не должны быть там. Я попробовал (REPLACE) все еще не работать. – MishMish

+0

Хорошо, ваши цифры слишком большие, чтобы конвертировать в INT, поэтому попробуйте BIGINT вместо этого? Другими словами, измените последний CONVERT на CONVERT (BIGINT, b.ID). –

Смежные вопросы