Как сравнить два столбца, чтобы увидеть, присутствует ли один и тот же текст в обоих

sql #sql-server #function #text

#sql #sql-сервер #функция #текст

Вопрос:

Я работаю в SSMS версии 18.2.

Я сравниваю некоторые беспорядочные адреса, чтобы увидеть, совпадают ли они по существу. Я получаю адрес в виде 4 отдельных столбцов: адресная строка1, адресная строка2, адресная строка3 и адресная строка4. Я пытаюсь сравнить этот адрес с адресом, введенным вручную. Часто адреса похожи, но набранный вручную может содержать орфографические ошибки или быть сокращенной версией полного адреса. Я объединил адресную строку 1-4 в одну строку и удалил все пробелы:

REPLACE(CONCAT(AddressLine1,AddressLine2,AddressLine3,AddressLine4),' ','') AS CorrectedAddress

Затем я пытаюсь сравнить этот адрес с введенным вручную адресом, который я привел в порядок:

REPLACE(ManualAddress,' ','') AS TidyManualAddress

Я пытаюсь найти наилучший способ сравнить их. По сути, я хотел бы сказать, что если где бы текст в TidyManual Адрес не отображался в CorrectedAddress, тогда Y else N.

Я попробовал следующее:

CASE WHEN SUBSTRING(TidyManualAddress,1,8) = SUBSTRING(CorrectedAddress,1,8) THEN 'Y' ELSE 'N' END AS AddressMatch

Однако выбор из 8 символов в функции substring выбирается произвольно.

Есть ли способ сравнить два столбца, чтобы увидеть, найдена ли строка из одного столбца в другом?

В качестве примера, если мой исправленный адрес — MovingPlace, MakeUpTown, SomeCountry, а мой ручной адрес — MovingPlace, я хотел бы вернуть yes, поскольку MovingPlace находится в строке в первом столбце. Моя проблема, очевидно, заключается в разной длине текста каждой строки.

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

1. Примерные данные очень помогли бы вашему вопросу.

2. Что-то вроде этого : SQL CASE WHEN CorrectedAddress LIKE '%' TidyManualAddress '%' THEN 'Y' ELSE 'N' END AS AddressMatch ?

Ответ №1:

Используйте CHARINDEX() :

 SELECT
  CASE
    WHEN CHARINDEX(TidyManual, CorrectedAddress) = 0 THEN 'N'
    ELSE 'Y'
  END AS MATCH