Удаление символов после пробела в sql

#sql #snowflake-cloud-data-platform

Вопрос:

У меня есть две таблицы, как показано ниже:

Таблица 1
Таблица 2

Я хотел бы сопоставить эти два столбца, т. е. ИМЯ ПОЛЬЗОВАТЕЛЯ из таблицы 1, с ИМЕНЕМ ПОЛЬЗОВАТЕЛЯ из таблицы 2.

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

 SELECT * FROM
table1 A 
 JOIN
table2 B 
ON 
LEFT(upper(A.FIRST_NAME)||' ', CHARINDEX(' ', upper(A.FIRST_NAME)) - 1)= 
LEFT(upper(B.FIRSTNAME)||' ', CHARINDEX(' ', upper(B.FIRSTNAME)) - 1)
 

Пожалуйста, предложите!

Комментарии:

1. Что на самом деле возвращают ваши левые… расчеты? Split_Part может быть чище/проще — splitpart(a.first_name,' ',0) .

2. @Andrew: splitpart работал на меня .. На самом деле это была разделенная часть в снежинке. Большое спасибо!

3. существует общее правило: никогда не использовать SQL в функции, где это, и это, где, таким образом, зависеть от размера вашей таблицы, и насколько сложным вы присоединяетесь к логике получается, что это может быть чище, чтобы подтолкнуть превращается в КТР (или подзапрос), где вы строите clean_name из обеих таблиц, а затем хэш-соединения между теми, кто будет чище.

Ответ №1:

Я бы добавил обрезку, чтобы убедиться, что нет пробелов, препятствующих совпадению.

 select * from A join B on
upper(trim(split(A.FIRST_NAME, ' ')[0]::string)) = upper(trim(split(B.FIRST_NAME, ' ')[0]::string))