2017-02-08 3 views
1

Wie würde ich Adressdatensätze finden, die keine Ziffer gefolgt von einem Leerzeichen enthalten? (z. B. 15SMith St. im Gegensatz zu 15 Smith St)Postgres regex string matching

WHERE a.address not like '.[0-9] .' 

funktioniert eindeutig nicht für mich.

+1

Was ist mit 'WHERE a.Adresse nicht gleich '% [0-9]%''? –

+0

Perfekt! Danke! –

Antwort

2

Sie können mit NOT und ein Muster verwenden, das eine "seltsame Kreuzung zwischen LIKE-Notation und allgemeiner Regular-Expression-Notation" ist. Es unterstützt [0-9]:

Ein Klammerausdruck [...] gibt eine Zeichenklasse, ebenso wie in POSIX regulären Ausdrücken.

Also, Sie

WHERE a.address NOT SIMILAR TO '%[0-9] %' 

Hier verwenden können % eine beliebige Anzahl von beliebigen Zeichen, entspricht [0-9] alle Ziffern, ein Raum entspricht einem Leerzeichen und dann % wieder eine beliebige Anzahl von beliebigen Zeichen. Diese % sind erforderlich, da SIMILAR TO eine vollständige Übereinstimmung der Zeichenfolge erfordert, wie LIKE.