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

X 個以上の文字を共有するすべての文字列を類似度順に検索します

    このアプローチでは、数値ジェネレーターを使用し、オーバーラップの長さをテストするだけです:

    select x.drug_name, x2.drug_name, MAX(c.seqnum) as OverlapLen
    from x cross join
         x x2 cross join
         (select ROW_NUMBER() over (order by (select NULL)) seqnum
          from INFORMATION_SCHEMA.COLUMNS c
         ) c
    where LEFT(x.drug_name, c.seqnum) = LEFT(x2.drug_name, c.seqnum) and
          len(x.drug_name) >= c.seqnum and len(x2.drug_name) >= c.seqnum
    group by x.drug_name, x.drug_name
    order by x.drug_name, OverlapLen desc
    

    これは information_schema.columns 長い薬物名を表示するのに十分な行があります。

    これは x を結合します それ自体に変換してから、数値のリストに結合します。 where 句は次の 3 つの条件をチェックしています。(1) 各薬剤名の左側の部分が seqnum まで同じであること。 (2) 各薬物名の長さが seqnum 以下であること。

    次に、集計は各ペアを取得し、seqnum の最大値を選択します。これは、最長の部分文字列一致である必要があります。



    1. mysqliプリペアドステートメントnum_rows関数

    2. SQLクエリで4つのテーブルを結合する

    3. Oracleのバインド変数を介して列名を参照することは可能ですか?

    4. 均等なサイズのグループを作成する方法