#sql
#sql
Вопрос:
Я пытаюсь объединить две таблицы на основе первых двух цифр почтовых индексов Великобритании. Проблема в том, что не все почтовые индексы в моей таблице начинаются с двух букв. Например:
Table 1
Birmingham B
Bath BA
Table 2
B5 5NR
BA1 2BX
Если бы я должен был присоединиться, используя LEFT (почтовый индекс, 2) Я бы исключил Бирмингем. Если бы я должен был присоединиться, используя LEFT (почтовый индекс, 1) Я бы исключил Bath. Есть ли способ просто взять первую текстовую часть почтового индекса?
Большое спасибо
Комментарии:
1. Какую базу данных вы используете?
Ответ №1:
Вы можете попробовать следующий запрос, предполагая, что вторая таблица содержит число после почтового индекса, до которого нам нужно отрезать, чтобы извлечь почтовый индекс.
SELECT Name,A.Code,B.Code,B.Val
FROM table1 A
JOIN table2 B ON A.Code =LEFT(B.Code,PATINDEX('%[0-9]%',B.Code)-1)
Ответ №2:
Поскольку почтовый индекс в таблице 1 короче, вы пробовали использовать подстроку с длиной почтового индекса в таблице 1.
Что-то вроде SubString(table1.почтовый индекс, 0, длина(table1.почтовый индекс))
Это должно работать как условие соединения. Попробуйте, пожалуйста.
Комментарии:
1. Спасибо за вашу помощь Kn0rK3, я попробовал это, но все, что я получаю в ответ, это то, что «ДЛИНА» не является распознанным именем встроенной функции?
2. Да, извините. В T-SQL это ДЛИНА, а не ДЛИНА
Ответ №3:
Это приведет к удалению последнего символа строки в SQL Server:
LEFT(Postcode,LEN(Postcode)-1)