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

大文字と小文字および特殊文字を無視して、2つの列で重複の可能性を見つけます

    lower() / upper()

    これらのいずれかを使用して、文字を小文字または大文字に折ります。特殊文字は影響を受けません:

    SELECT count(*), lower(name), number
    FROM   tbl
    GROUP  BY lower(name), number
    HAVING count(*) > 1;
    

    unaccent()

    コメントが示すように、発音区別符号を実際に無視したい場合は、追加のモジュール<をインストールします。 code> unaccent 、アクセントを削除するテキスト検索辞書と、汎用関数 unaccent()を提供します。 :

    CREATE EXTENSION unaccent;
    

    非常にシンプルになります:

    SELECT lower(unaccent('Büßercafé'));
    

    結果:

    busercafe
    

    これは非文字を削除しません。 regexp_replace()を追加します そのために言及された@Craigのように:

    SELECT lower(unaccent(regexp_replace('$s^o&f!t Büßercafé', '\W', '', 'g') ));
    

    結果:

    softbusercafe
    

    その上に機能インデックスを作成することもできます:



    1. $mysqli->insert_idと同等のpostgresql

    2. SQL ServerのSleep()と同等:WAITFORステートメント

    3. SQL Server実行プラン—それは何であり、パフォーマンスの問題にどのように役立ちますか?

    4. mysqlワークベンチ、ファイルから列を置き換えます