2017-04-05 54 views
1

得到一個特定的子我有了所謂的「細節」爲一列的Orders表:如何從一列在SQL

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. 

有該列不同的單元格值。也可能是這樣的:

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 

或其他任何東西。

我只想提取它的Order ID(s): 112-0654231-9637802部分。我怎麼做?

+0

應該能夠使用REGEXP_LIKE – maSTAShuFu

+0

請舉例嗎?我看到的所有示例在where子句中使用regexp_like,但我只是想將order_id另存爲另一列 – Arman

+0

使用regexp_like並將其設置爲substr(起始位置)並獲取regexp_like「Call Summary」,並將此點設置爲結束位置。 – maSTAShuFu

回答

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

只得到你可以用數字的捕獲組數:

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 

或者,如果你沒有別的具有相同3位數,短劃線,7位數,破折號,7位數字格式:

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

我可以從訂單編號即112-0654231-9637802獲得編號嗎? – Arman

+0

@阿曼已更新。 – MT0

0

你的字符串看起來像一個固定的格式字符串,那麼最簡單的方法是:

select substr(detail, 160, 31) 
+0

如果網站名稱比密西西比州的「奧蘭多」長,該怎麼辦? – maSTAShuFu

+0

你能解釋一下這160,31嗎?訂單ID出現在該列的每個字段的不同位置。 – Arman

+0

@maSTArHiAn。 。 。那麼大概它不會有太多的空間。該字段看起來像一個固定格式的字段,缺少任何其他信息。 –