sql >> データベース >  >> RDS >> Sqlserver

SQL Select Like キーワードを任意の順序で

    あなたは本当のようですね 特に単語に重みを付けたいため、全文検索を探しています。

    LIKE を使用するには 、動的 SQL を意味する複数の式 (単語ごと、列ごとに 1 つ) を使用する必要があります。あなたが使用している言語がわからないので、例を示すことはできませんが、次のようなステートメントを作成する必要があります:

    「フラフープ」の場合:

    where (ProductName like '%hula%' or ProductName like '%hoops%')
      and (Description like '%hula%' or Description like '%hoops%')
      and (ShortName like '%hula%' or ShortName like '%hoops%')
    

    など

    残念ながら、それが本当に唯一の方法です。全文検索を使用すると、条件を列ごとに 1 つに減らすことができますが、それでも列を明示的に指定する必要があります。

    あなたは SQL Server を使用しているため、これは C# に関する質問であると推測してしまいます。このようなことをしなければなりません (SqlCommand を構築していると仮定すると) または DbCommand 自分自身に反対します。 ORM を使用している場合は、すべての賭けがオフになり、とにかくこれを尋ねることはないでしょう):

    SqlCommand command = new SqlCommand();
    int paramCount = 0;
    
    string searchTerms = "Hula Hoops";
    
    string commandPrefix = @"select *
    
    from Products";
    
    StringBuilder whereBuilder = new StringBuilder();
    
    foreach(string term in searchTerms.Split(' '))
    {
        if(whereBuilder.Length == 0)
        {
            whereBuilder.Append(" where ");
        }
        else
        {
            whereBuilder.Append(" and ");
        }
    
        paramCount++;
    
        SqlParameter param = new SqlParameter(string.Format("param{0}",paramCount), "%" + term + "%");
    
        command.Parameters.Add(param);
    
        whereBuilder.AppendFormat("(ProductName like @param{0} or Description like @param{0} or ShortName like @param{0})",paramCount);
    }
    
    command.CommandText = commandPrefix + whereBuilder.ToString();
    


    1. 再帰的な結果のためのLaravelクエリビルダー?例えば。 id、parent_id

    2. MySQL:インデックスを作成するには長すぎる列に対する効率的なクエリ

    3. SQL-varcharデータ型を日時データ型に変換した結果、値が範囲外になりました

    4. 制限に相当するものを区別するにはどうすればよいですか?