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

PostgreSQLでの文字列の比較

    PostgreSQLWiki でこれを行うさまざまな方法を見つけました。 。

    plperlの場合:

    CREATE OR REPLACE FUNCTION unaccent_string(text) RETURNS text AS $$
    my ($input_string) = @_;
    $input_string =~ s/[âãäåāăą]/a;
    $input_string =~ s/[ÁÂÃÄÅĀĂĄ]/A;
    $input_string =~ s/[èééêëēĕėęě]/e;
    $input_string =~ s/[ĒĔĖĘĚ]/E;
    $input_string =~ s/[ìíîïìĩīĭ]/i;
    $input_string =~ s/[ÌÍÎÏÌĨĪĬ]/I;
    $input_string =~ s/[óôõöōŏő]/o;
    $input_string =~ s/[ÒÓÔÕÖŌŎŐ]/O;
    $input_string =~ s/[ùúûüũūŭů]/u;
    $input_string =~ s/[ÙÚÛÜŨŪŬŮ]/U;
    return $input_string;
    $$ LANGUAGE plperl;
    

    純粋なSQLの場合:

    CREATE OR REPLACE FUNCTION unaccent_string(text)
    RETURNS text
    IMMUTABLE
    STRICT
    LANGUAGE SQL
    AS $$
    SELECT translate(
        $1,
        'âãäåāăąÁÂÃÄÅĀĂĄèééêëēĕėęěĒĔĖĘĚìíîïìĩīĭÌÍÎÏÌĨĪĬóôõöōŏőÒÓÔÕÖŌŎŐùúûüũūŭůÙÚÛÜŨŪŬŮ',
        'aaaaaaaaaaaaaaaeeeeeeeeeeeeeeeiiiiiiiiiiiiiiiiooooooooooooooouuuuuuuuuuuuuuuu'
    );
    $$;
    

    そしてplpythonで:

    create or replace function unaccent(text) returns text language plpythonu as $$
    import unicodedata
    rv = plpy.execute("select setting from pg_settings where name = 'server_encoding'");
    encoding = rv[0]["setting"]
    s = args[0].decode(encoding)
    s = unicodedata.normalize("NFKD", s)
    s = ''.join(c for c in s if ord(c) < 127)
    return s
    $$;
    

    あなたの場合、UTF-8テーブル 十分なはずです。



    1. Pythonプログラムを実行するたびに新しい列を追加する方法

    2. OracleSQLで一重引用符を処理する方法

    3. 完全ではなく高速リフレッシュを使用したOracleのマテリアライズドビューが機能しない

    4. liquibaseを使用してmysqlでトリガーを作成する