家屋番号なしでアドレス用の別の治療を必要としない簡単な解決策は、これです:
with t (address) as (
select '422 Hickory Str.' from dual union all
select 'One US Bank Plaza' from dual
)
select regexp_substr(address, '\s*([^0-9]*)$', 1, 1, null, 1) as street from t;
出力は次のようになります。REGEXP_SUBSTRする
STREET
-------------------------
Hickory Str.
One US Bank Plaza
3番目の引数があります3つの1のうちの最初のもの。これは、アドレスの最初の文字で検索を開始することを意味します。 2番目の1は、検索パターンが最初に出現することを意味します。 nullは、特別なマッチ修飾子を持たないことを意味します(大文字と小文字を区別しません。最後の1は "マッチパターンから最初のSUBEXPRESSIONを返す"ことを意味します。部分式は、カッコで囲まれた一致式の部分です。
マッチパターンは、末尾に$を持っている - 「入力文字列の末尾にアンカー」を意味する($文字列の末尾を意味します)。次に、[...]角括弧内の文字のいずれかが一致することを意味しますが、^ [^ ...]で、それは角括弧にあるもの以外の任意の文字に一致するように変更します。 0〜9は、0〜9の間のすべての文字を意味します。だから、[^ 0-9]は任意の文字にマッチすることを意味し、その後の*は「任意の数のそのような文字」を意味する(0から入力文字列のすべてまで)。 \ s「は空白」である - アドレスで可能な数を、次のいずれかの空白がある場合、あなたは彼らが右の通りの名前の先頭に含めたくありません。部分式があるだけで、[^ 0-9] *彼らの前にスペースを含まない、非数字を意味する(\ sの*は左括弧の外側にあるため)。時々アドレスは、実際には、それに「番号」を持っていないが、その代わりに数字を使用しての単語として綴ら -
私の例では、しかし、潜在的な問題を示しています。私が示していることは、実際に私の街の現実の住所です。
幸運を祈る!
をたぶん、あなたはそう、何の数字を持っていない対処カウントは0になります。あなたは文字列と希望の出力を開始する例を投稿していただけますか? – Aleksej
それはまさにそれでした。文字列に数字があることを確認するために句を追加すると、エラーは消えてしまいました。本当にありがとう! – Jenny