質問

次のことをするアイデアをお持ちの方がいらっしゃいますか? いくつかのcardefinitions [id] [Company] [Mode]を含む1つのテーブルがあります。これは、たとえばAudi 100、Ford Mustanなどです。車とモデルの両方を含む文字列である別のフィールドがあります。これは「Ford Mustang 2.5T」になる可能性があります。次に、カーディフィニションから正しいIDを見つける必要があります。私はやるけど

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

しかし、モデル+会社が一意ではないため、このエラーが発生します:"フルテキストインデックスが作成されていないため、テーブルまたはインデックス付きビュー 'dbo.CarModelDefinition'でCONTAINSまたはFREETEXT述語を使用できません。 / em> 誰も私がこれを解決する方法のアイデアを持っていますか?

役に立ちましたか?

解決

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は文字列でなければなりませんか? 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