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

非ASCII文字をチェックするPostgresql制約

    ASCIIを定義できます ordinal 1 to 127として この目的のために、次のクエリは「非ASCII」値の文字列を識別します。

    SELECT exists(SELECT 1 from regexp_split_to_table('abcdéfg','') x where ascii(x) not between 1 and 127);
    

    ただし、これは非常に効率的ではない可能性があり、サブクエリを使用すると、CHECK制約ではなくトリガーで実行する必要があります。

    代わりに、正規表現を使用します。 すべての印刷可能な文字が必要な場合 次に、次のようなチェック制約で範囲を使用できます。

    CHECK (my_column ~ '^[ -~]*$')
    

    これは、スペースからチルダまですべてに一致します 、これは印刷可能なASCII範囲です。

    印刷可能および印刷不可能なすべてのASCIIが必要な場合は、バイトエスケープを使用 できます。 :

    CHECK (my_column ~ '^[\x00-\x7F]*$')
    

    最も厳密に正しいアプローチは、convert_to(my_string, 'ascii')です。 失敗した場合は例外を発生させます...しかしPostgreSQLはasciiを提供していません (つまり、7ビット)エンコーディングであるため、アプローチは不可能です。



    1. mysqli_stmt ::num_rows()が間違った値を返す

    2. サーバーのタイムゾーンオフセット値

    3. REVERSE()関数を使用せずにOracle(11g)SQLで文字列を逆にする方法

    4. mysqlテーブルのテキストを見つけて置き換える方法