Вопрос

Я хотел бы услышать, если у кого-нибудь из вас есть идея сделать следующее: У меня есть одна таблица, содержащая некоторые определения [id] [Company] [Mode], это может быть, например, например, Audi 100, Ford Mustan и т. д. У меня есть еще одно поле, представляющее собой строку, содержащую как автомобиль, так и модель, это может быть «Ford Mustang 2.5T», затем мне нужно найти правильный идентификатор в определении автомобиля. Я хоть делаю

@CarDefintion = "Ford Mustang 2.5T"
Select top 1 CarDefinitionId 
  from dbo.CarModelDefinition 
 where CONTAINS(Model,@Cardefinition) 
   AND Contains(Company, @Cardefinition)

Но так как Model + Company не уникальна, я получаю эту ошибку: " Невозможно использовать предикат CONTAINS или FREETEXT для табличного или индексированного представления 'dbo.CarModelDefinition', поскольку он не индексируется в полнотекстовом формате. " У кого-нибудь есть идеи, как мне это решить?

Это было полезно?

Решение

Поиск строки по значениям столбцов с подстановочными знаками с помощью LIKE

@CarDefintion = "Ford Mustang 2.5T"
Select top 1 CarDefinitionId 
  from dbo.CarModelDefinition 
 where @Cardefinition like '%' + model + '%'
   AND @Cardefinition like '%' + company + '%';

+ - оператор объединения строк.

Другие советы

@CarDefintion = "Ford Mustang 2.5T"

Select top 1 CarDefinitionId 
  from dbo.CarModelDefinition 
 where @Cardefinition LIKE Model OR @Cardefinition LIKE Company 

Должна ли @CarDefintion быть строкой? Можно ли будет сделать его массивом Model и Company, на который вы затем сможете ссылаться в своем SQL?

В противном случае вы будете абсолютно уверены, что кто-то просто не поставит "Mustang 2.5T" вместо "Ford Mustang 2.5T"? Если вы можете быть абсолютно уверены, то один из способов сделать это - разделить пробелами, а затем выполнить серию поисков в каждом сегменте, чтобы попытаться найти его.

DECLARE @CarDefintion VARCHAR(25)
        SET @CarDefintion = 'Ford Mustang 2.5T'

DECLARE @Make  VARCHAR(25)
DECLARE @Model VARCHAR(25)
SELECT @Make  = SUBSTRING(@CarDefintion,0,CHARINDEX(' ',REVERSE(@CarDefintion)))
SELECT @Model = LTRIM( REPLACE(@CarDefintion,@Make,'')) 

--SELECT @Make,@Model

        SELECT TOP 1 * 
          FROM dbo.CarModelDefinition 
         WHERE Model   = @Model
           AND Company = @Make

Функции CONTAINS () предназначены для полнотекстового поиска, который вы, скорее всего, не используете (отсюда и ошибки)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top