私は2つの形式で値を含むPostgresの列を持っているに応じて、異なるグループにマッチします。社名にはカンマが含まれていますが、個人名にはカンマが含まれています
私はこのように、唯一の個人名を略記クエリを生成する必要が_owner_titlecase
-------------------------
McCartney, James Paul
Lennon, John Winston Ono
Harrison, George
Starkey, Richard
The Beatles
:いくつかのパフォーマンス・テストの後
regexp_replace
-------------------------
McCartney, J P
Lennon, J W O
Harrison, G
Starkey, R
The Beatles
背景
、私は私がすることはできません実現してきましたCASE
を使用して、2つの行タイプを異なる方法で扱います(CASE WHEN _owner_titlecase ~ ',' regexp_replace...
のように)。だから、私は二つのタイプを別々に扱うことができる単一の正規表現を書く方法があることを望んでいる。
I個人名の頭文字の一部を処理する方法についてpreviously asked、以下のようになりました(^\w+)|\Y\w
正規表現を使用しています:
, regexp_replace(_owner_titlecase
, '(^|;\s+)(\w+)|\Y\w'
, '\1', 'g')
は今、私はもちろん、企業名、見て範囲を拡大してきましたThe Beatles
はThe B
と略されています。
\Y
は、私がhereについて学んだPostgresの正規表現文字クラスで、単語の始まりや終わりではない点でのみ一致します。特別なPostgresクラスはこのような状況で使用できるように見えますが、regex101.comのような場所でテストできるので、普遍的な正規表現機能を使うことは実際には便利です。現在のところ私の唯一のPostgresテストプラットフォームはやや厄介で、デバッグの助けはありません。
私たちは、プロパティ所有者名を含むレイヤーをスーパーインポーズしたいCartoDBマップを持っているという話があります。いくつかのプロパティは近くにあり、所有者名のリストは長くなる可能性があるため、省略する必要があります。
私は '^([^、] *)$ |(^ |; \ s +)(\ w +)| \ Y \ w'パターンを使用し、' '\ 1 \ 2 \ 3 ' –
もう一度@wictorありがとうございます。これはほとんどの個人的な名前のために働きます。それは、オブリアン、ジョン・アンドリューの権利を得ていない。 – OutstandingBill
私はこの問題を正しく理解していないかもしれませんが、 'WHERE name LIKE '%、%'' – Fallenhero