nar86 Ответов: 3

Ошибка преобразования типа данных varchar в bigint.


таблица регистрации фермерских хозяйств выглядит следующим образом


тип данных farmerid Varchar(50) в таблице farmerregistration

farmerid Firstname регион зона раздел деревня

1055662 Лачина Оунгало Диавала Норд Дивала


таблица транзакций выглядит следующим образом

тип данных transactionid Bigint в таблице транзакций

transactionid кол-во цена оплачена должным образом

1055662 1 200 200 100


из вышесказанного я хочу получить следующий результат

Имя Регион Зона Раздел Кол-Во Оплаченная Цена

Lacina OUNGALo Diawala Nord 1 200 200


Мой запрос выглядит следующим образом

выберите.firstName,то.Области,.Зоны.Раздел,б.Кол-во,б.Цена,б.платная
от farmerregistration a,
транзакция b, где a.transactionid = b.farmerid

Примечание в таблице farmerregistration тип данных farmerid-varchar(50)
в транзакции ИД транзакции в таблице Тип данных имеет тип данных bigint

когда я запускаю приведенный выше код показывает ошибку следующим образом

Ошибка преобразования типа данных varchar в bigint.

как решить эту ошибку. исходя из моего вышеприведенного вопроса, какие изменения я должен внести.

Что я уже пробовал:

таблица регистрации фермерских хозяйств выглядит следующим образом


тип данных farmerid Varchar(50) в таблице farmerregistration

farmerid Firstname регион зона раздел деревня

1055662 Лачина Оунгало Диавала Норд Дивала


таблица транзакций выглядит следующим образом

тип данных transactionid Bigint в таблице транзакций

transactionid кол-во цена оплачена должным образом

1055662 1 200 200 100


из вышесказанного я хочу получить следующий результат

Имя Регион Зона Раздел Кол-Во Оплаченная Цена

Lacina OUNGALo Diawala Nord 1 200 200


Мой запрос выглядит следующим образом

выберите.firstName,то.Области,.Зоны.Раздел,б.Кол-во,б.Цена,б.платная
от farmerregistration a,
транзакция b, где a.transactionid = b.farmerid

Примечание в таблице farmerregistration тип данных farmerid-varchar(50)
в транзакции ИД транзакции в таблице Тип данных имеет тип данных bigint

когда я запускаю приведенный выше код показывает ошибку следующим образом

Ошибка преобразования типа данных varchar в bigint.

как решить эту ошибку. исходя из моего вышеприведенного вопроса, какие изменения я должен внести.

Richard MacCutchan

Почему вы используете VARCHAR(50) для числового значения? Вам нужно сделать оба поля одного типа, чтобы их можно было сравнить.

Richard MacCutchan

Я повторяю свое предыдущее предложение: возьмите несколько книг по программированию и изучите основы.

3 Ответов

Рейтинг:
2

Member 14335040

Я не уверен, что это поможет, так как я очень новичок в этом деле. Я просто пытался исправить то, что кажется похожей проблемой. Я создал поисковый запрос и получил ту же ошибку.

Я зашел на страницу дизайна своей базы данных, изменил дизайн для этого поля с BigInt на nvarchar(50).

Затем я вошел в исходный запрос, щелкнул по нему правой кнопкой мыши и нажал кнопку Настроить. Мне пришлось повторно щелкнуть по всему, но когда я нажал на кнопку Готово и запрос обновился, моя программа начала работать.

Желаю удачи. Прошу прощения, если это полная чушь.. просто полный новичок здесь.


CHill60

Вы никогда не должны хранить числовые данные в Столбцах nvarchar. Вы должны были изменить (другой) столбец varchar, чтобы он был bigint. Всегда используйте наиболее подходящий тип столбца для данных, которые будут храниться в нем.

Рейтинг:
1

OriginalGriff

Это довольно просто: вы храните данные в неправильном формате.
Когда вы используете VARCHAR или NVARCHAR вместо числового столбца или столбца на основе даты, вы почти гарантированно гарантируете, что в какой - то момент кто-то введет плохие данные-и они не будут замечены, пока они действительно не будут использованы, а к этому времени будет уже слишком поздно, чтобы понять, что это должно быть, и исправить это.
И это обычно проявляется как ошибка преобразования, когда вы пытаетесь использовать данные, так же, как это происходит в вашей таблице.

Всегда храните данные в наиболее подходящем типе t6eh, иначе у вас будет продолжать возникать эта проблема.

Измените свою базу данных, преобразуйте значения, которые можно преобразовать, и исправьте те, которые не могут быть преобразованы.


Рейтинг:
1

Member 7870345

На мой взгляд, ошибка возникает из-за того, что в таблице farmerregistration есть записи, которые содержат "no number" в поле farmerid (например: A12334, 213 F... или что-то в этом роде).

Итак, where a.transactionid = b.farmerid лечит, чтобы преобразовать это значение "без чисел" в bigint и вызывает ошибку.

Попробуйте использовать:

where ltrim(rtrim(a.transactionid))=ltrim(rtrim(convert( varchar(50), b.farmerid)))


(Пояснение, вместо неявного преобразования varchar в bigint, преобразуйте явно bigint в varchar, а затем сравните alltrim [ltrim, rtrim] этих значений)