2017-04-05 5 views
1

Ich habe eine Tabelle Orders, die eine der Spalten namens „Details“, wie hat:Wie ein bestimmten Teilzeichen aus einer Spalte in SQL erhalten

Contact ID: A18YTX7GWEJRU8 City/Site and Site Name: Orlando - Orlando (UFL4) Date of Call (MM/DD/YYYY): 01/23/2017 Time of Call (Local Time): 16:44 Order ID(s): 112-0654231-9637802 Call Summary: Cx did not receive. Order marked as delivered to doorstep at 16:27  created by flx-cstech on behalf of sssmiley. 

Es gibt verschiedene Zellwerte in dieser Spalte. Könnte auch sein wie:

Short Description: Dry Ice Retrieval Please enter the following information for the site ops to pick up the dry ice from the customer: Contact ID:AD3R60PA1QCCF Order ID:112-6254812-3186644 

Oder irgendetwas anderes.

Ich möchte nur den Order ID(s): 112-0654231-9637802 Teil daraus extrahieren. Wie mache ich das?

+0

sollte verwenden können REGEXP_LIKE – maSTAShuFu

+0

Jedes Beispiel bitte? Alle Beispiele, die ich sehe, verwenden regexp_like in der where-Klausel, aber ich möchte nur order_id als eine andere Spalte speichern – Arman

+0

regexp_like verwenden und den Subtr als Startposition festlegen (Startposition) und die regexp_like "Call Summary" abrufen und diesen Punkt als festlegen der Endort – maSTAShuFu

Antwort

1
SELECT REGEXP_SUBSTR(
     your_column, 
     'Order\s+ID(\s*\(s\))?:\s*\d{3}-\d{7}-\d{7}' 
     ) 
FROM your_table 

Um die Zahl gerade Sie die Nummer in einer Capture-Gruppe wickeln kann:

SELECT REGEXP_SUBSTR(
     your_column, 
     'Order\s+ID(\s*\(s\))?:\s*(\d{3}-\d{7}-\d{7})', 
     1,            -- Start from the 1st character 
     1,            -- Get the 1st match 
     NULL,           -- Apply default flags 
     2            -- Get the 2nd capture group 
     ) 
FROM your_table 

Oder, wenn Sie etwas nicht anderes mit dem gleichen 3-stellig, Strich, 7-stellig, Strich, 7-stelliges Format:

SELECT REGEXP_SUBSTR(
     your_column, 
     '\d{3}-\d{7}-\d{7}', 
     ) 
FROM your_table 
+0

Kann ich nur die Nummer aus der Bestell-ID bekommen, z. B. 112-0654231-9637802? – Arman

+0

@Arman aktualisiert. – MT0

0

Ihre Zeichenfolge sehen aus wie ein Format-String festgelegt, so ist der einfachste Weg wäre:

select substr(detail, 160, 31) 
+0

Was ist, wenn der Site-Name länger ist als "Orlando" wie mississippi? – maSTAShuFu

+0

Könnten Sie bitte erklären, was es das 160,31? Die Bestell-ID wird an verschiedenen Stellen in jedem Feld dieser Spalte angezeigt. – Arman

+0

@MASTArHiAn. . . Dann würden vermutlich nicht so viele Räume folgen. Das Feld sieht wie ein Feld mit festem Format aus und enthält keine weiteren Informationen. –

-1

https://docs.oracle.com/cd/B12037_01/appdev.101/b10795/adfns_re.htm

REGEXP_LIKE Diese Funktion sucht in eine Zeichenspalte für ein Muster. Verwenden Sie diese -Funktion in der WHERE-Klausel einer Abfrage, um Zeilen zurückzugeben, die dem von Ihnen angegebenen regulären Ausdruck entsprechen.

und ähnliche Funktionen

+0

Ich denke du redest über regexp_substr. Aber ich kenne Regex nicht. Antwort für dieses würde geschätzt werden – Arman

+0

, wenn ich sql Geige nur zur Arbeit bekommen kann, aber nicht in diesem Stadium. – maSTAShuFu

Verwandte Themen