2016-05-23 6 views
1

Ich möchte Variable erstellen: Zahl, die Zahlen extrahieren, bevor $Postgresql: extract Nummer vor Teilzeichenfolge gegeben

Name  | Number 
abc1/12 $ | 12 
12av 12$ | 12 
114$-bgv | 114 

Ich habe eine Abfrage:

select Name, substring(Name FROM '%#"[0-9]+#"$%' FOR '#') as Number 
from table; 

Aber es gibt:

Name  | Number 
abc1/12 $ | 
12av 12$ | 2 
114$-bgv | 4 

Irgendwelche Ideen?

+0

'Teilzeichenfolge (Name von '(\ d +) \ $')' – Abelisto

+0

i das Problem aktualisiert - bitte klicken Sie hier. – user3463225

+0

Es ist einfach: '(\ d +) \ s * \ $ '' – Abelisto

Antwort

1

Verwendung regexp_matches():

select 
    (regexp_matches(Name, '^(.*[^\d]+){0,1}(\d+)\$'))[2] as Number 
from (
    select 'abc1/12$' as Name 
    union select '12av 12$' 
    union select 'bgv-114$' 
    union select '124$' 
) t 

Oder mit substring()

select 
    coalesce(substring(Name FROM '.*[^\d]+(\d+)\$'), '') || 
    coalesce(substring(Name FROM '^(\d+)\$'), '') as Number 
from (
    select 'abc1/12$' as Name 
    union select '12av 12$' 
    union select 'bgv-114$' 
    union select '124$' 
) t 
+0

Dies behandelt nicht '5 $ foo' –

+0

Ok, bearbeitet mit '^' - Anfang des Strings – mnv

+0

Transparentere Abfrage ist mit 'regexp_matches()'. – mnv

Verwandte Themen