Как можно внутренне объединить две таблицы в Access, если один столбец является текстом, а другой - числом? - PullRequest
5 голосов
/ 26 января 2010

У меня есть программа доступа, которая использует некоторые связанные таблицы ODBC. Первоначально у меня был запрос, который содержал следующий INNER JOIN:

FROM Neptune_FN_Analysis 
INNER JOIN Neptune_prem ON Neptune_FN_Analysis.PremID = Neptune_prem.premice_id 

Это работало очень хорошо, пока столбец Neptune_prem.premice_id не изменился с числа на текстовый тип данных. Так что теперь мне нужен способ использовать INNER JOIN для двух столбцов, когда один - число, а другой - текст.

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

Если это невозможно или тратится много кода, другой мой логический вариант - сделать запрос для создания локальной таблицы, которую я могу редактировать со всеми теми же данными в таблице Neptune_FN_Analysis и в коде после редактирования этого запроса столбец, к которому я присоединяюсь, чтобы напечатать текст. Я бы предпочел просто изменить этот SQL-запрос, если это разумно.

Ответы [ 3 ]

5 голосов
/ 27 января 2010

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

4 голосов
/ 27 января 2010

Если вы говорите о превращении «500» в 500, посмотрите Val , CDbl , CInt , CCur , CDec и другие функции преобразования:

FROM Neptune_FN_Analysis 
INNER JOIN Neptune_prem ON Neptune_FN_Analysis.PremID = CInt(Neptune_prem.premice_id)
1 голос
/ 26 января 2010

Вы пытались использовать CAST('abc' AS varchar(5)) числовой столбец в varchar?

EDITED

Вы должны использовать clng для преобразования текста в число ...

...