Finden Sie eine Zahl mit Oracle regexp, der hat eine genaue Länge von 3
Ich will nur 456.
Habe ich versucht, dieses regulären Ausdrucks, aber ich habe alle zahlen enthalten, die 3-stelligen Zeichen, 456, 46354376, etc.
select regexp_substr(MY_COLUMN,'([[:digit:]]{3})') from MY_TABLE
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mir nicht ganz klar, ob Sie exakte übereinstimmungen oder sub-string übereinstimmt, so habe ich verschiedene Optionen:
SQL Fiddle
Oracle 11g R2-Schema-Setup:
Abfrage 1:
Wenn Sie möchten, dass nur Zeilen, in denen
MY_COLUMN
enthält genau eine 3-stellige Nummer, dann können Sie einfach Ihre regelmäßigen Ausdruck eingewickelt in den start-string (^
) und Ende-string ($
) Anker:Ergebnisse:
Abfrage 2:
Oder, wenn Sie mit Oracle 11g-dann können Sie die weniger ausführlich, die PERL-syntax:
Ergebnisse:
Abfrage 3:
Wenn Sie möchten, zu extrahieren, die die erste 3-stellige Zahl aus der Spalte (wo kann es umgebenden text oder mehrere Ziffern), dann:
Ergebnisse:
Abfrage-4:
Wenn Sie möchten, zu extrahieren, die der ersten genau 3-stellige Zahl aus der Spalte dann:
Ergebnisse:
Abfrage 5:
Wenn Sie möchten, zu extrahieren alle nicht-überlappende 3-stellige zahlen aus der Spalte (wo kann es umgebenden text), dann:
Ergebnisse:
Abfrage-6:
Wenn Sie möchten, zu extrahieren alle der sub-Spiele, die sind genau 3-stellige zahlen dann:
Ergebnisse:
Abfrage 7:
Wenn Sie möchten, extrahieren Sie alle 3-stelligen zahlen, die aus einer Spalte, unabhängig davon, ob die Spiele teilweise überlappen oder nicht, dann:
Ergebnisse:
REGEXP_REPLACE('somestring-051-a92','\D')
oder, gleichbedeutend mit POSIX-StilREGEXP_REPLACE('somestring-051-a92','[^[:digit:]]')
Du bist sub bespannen der Nummer... wenn Sie auf der Suche für eine Zahl, die genau 3 Ziffern, dann verwenden Sie
LENGTH()
:Dies setzt Voraus, dass Sie gespeichert haben, Ihre zahlen in eine Spalte ANZAHL. Ob es möglicherweise Zeichen in es auch
REGEXP_LIKE()
und sicherzustellen, dass Sie binden Sie den regulären Ausdruck an den Anfang (mit der^
Betreiber) und Ende ($
) der stringDu bist nicht überprüfen, um zu sehen, ob Ihre Anzahl ist zu Beginn und zum Ende der Zeichenfolge, so dass Sie immer alles mit 3 zahlen.
Können Sie dieses Muster:
wo
[^[:digit:]]
ist all das ist keine Zahl und^
,$
sind Anfang und Ende der Zeichenfolge Anker.