SQL - Поиск 'Адрес' Где Содержит строковый параметр - PullRequest
0 голосов
/ 14 июня 2019

У меня есть хранимая процедура, которая находит конкретный адрес.

Поля

  • Город
  • Провинция
  • Почтовый индекс

Записи

  • Город: Манила, Макати, Себу, Кавит
  • Провинция: NCR, NCR, CEBU, CAVITE
  • Почтовый индекс: 1111, 2222, 3333, 4444

Мой параметр принимает только 1 полную строку

Пример:

Declare @param as nvarchar (50)
SET @param = 'Man NC'
--query where condition like @param

Результат должен быть Манила, NCR 111 .Я уже пробовал этот запрос.Но, очевидно, это не правильно, потому что параметр содержит город и провинцию.

SELECT c.CityName, p.ProvinceName, c.Zipcode 
FROM City c (NOLOCK)
JOIN Province p (NOLOCK) ON c.ProvinceCode = p.ProvinceCode
WHERE c.CityName like '%' + @param + '%' 
OR p.ProvinceName like '%' + @param + '%' 
OR (c.CityName + ' ' + p.ProvinceName) like '%' + @param + '%'

Я видел несколько постов здесь в stackoverflow, предлагающих использовать ПОЛНЫЙ ТЕКСТ ПОИСК.Но как это сделать без использования указанной функции?

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Вы можете объединить свои поля, прежде чем они вам понравятся.Вам также разрешено редактировать вашу строку:значение

Если вы будете подавать запросы в виде "NC Man", вы можете просто иметь ИЛИ с КОНКАТОМ, который объединяет провинцию и город.Вы могли бы быть намного более вовлеченными, разделяя ценность и т.д .;это действительно зависит от того, что вы укажете (и вы не включили много вопросов в свой вопрос)

Если вы собираетесь выполнять много запросов, было бы лучше пригнать вариантыиз @param и установите некоторые правила, чтобы вещи могли быть лучше проиндексированы.Примером правила может быть: @param должен быть одним словом или двумя словами, и слова должны представлять начало названия города или названия провинции или названия города и названия провинции.

С такими правилами, какчто вы можете разделить на пробел, CONCAT% только на конец слова и искать столбцы соответствующим образом - возможно, с помощью объединения, а не или (может быть быстрее)

Редактировать: версия без функции CONCAT

WHERE (c.CityName + "," + p.ProvinceName) like ('%' + REPLACE(@param, ' ', '%') + '%')
0 голосов
/ 14 июня 2019

Я не совсем уверен, если это то, что вы хотите.

Declare @city table (city varchar(50))

insert into @city values ('Manila'),('Makati'),('Cebu City'),('Kawit')

Declare @province table (Province varchar(50),zip int)

insert into @province values ('NCR',1111),('NCR',2222),('CEBU',3333),('CAVITE','4444')

select top 1 city + ', ' + Province + cast(zip as varchar) as name from @city c cross join @province d  where city like 'Man%' and Province like 'NC%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...