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

Postgresの正規表現の問題

    -をエスケープする必要はありません 最初または最後の位置に配置すると、文字クラス内に配置されます。これは、そのように範囲として誤読される可能性がないためです。

    [\- ] -> [- ]
    [\d\- ] -> [\d -]

    あなたがそれを持っている方法は上限10 最後に無駄です。
    $を追加します 最後に末尾の文字を禁止します。
    または\D 末尾の数字を禁止する (ただし、数字以外が必要です)。
    または($|\D) 文字列をそこで終了するか、数字以外のフォローを付けます。

    まとめる:

    SELECT '+79637434199' ~ '^(8|\+7)[ -]?(\(?\d{3}\)?[ -]?)[\d -]{7,10}($|\D)'
    

    それ以外の場合、式は問題なく、PostgreSQL9.1.4で機能します。 WHEREで使用するかどうかに関係なく、何の違いもありません。 句またはSELECT リスト-古いバージョン(コメントで提案されている@kgrittnなど)でバグが発生している場合を除きます。

    文字列リテラルの前にEを付けると 、私はあなたが得るエラーメッセージを引き起こすことができます。これはできません 式はSELECTとして正常に機能すると述べたため、問題を説明してください アイテム。

    しかし、シャーロック・ホームズが引用しているように、「不可能を排除したとき、残っているものは、どんなにありそうもないとしても、真実でなければなりません。」

    standard_conforming_strings = on もう1つはstandard_conforming_strings = offです。 -これは、9.1より前の古いバージョンの文字列リテラルのデフォルトの解釈でした。たぶん、2つの異なるクライアント(それに関して異なる設定を持っている)で。

    詳細については、文字列定数の章を参照してください。 Cスタイルのエスケープ付き マニュアルで。




    1. エラー:この機能は、使用しているデータベースでは使用できません

    2. パラメータ宣言でvarchar(MAX)にどのサイズを使用しますか?

    3. PostgreSql、スキーマオブジェクトDDLを抽出してSQLファイルを分離します

    4. Oracle:クエリ1にrowdataがある場合、すべてのクエリ1とクエリ2を結合して一部の行を減算する