I have the following text from a column called 'subject':
Standard WiFi Install - (Broadband) by HS&S - Job No:VR041135037 on 2022-01-14
I need to extract the ID (VR041135037) and the date (2022-01-14) from the subject column.
What query can I write to go about doing this?
EDIT: This is the column from the table I have:
| Subject |
|---|
| OPALS INSTALL by HS&S - Job No:VR041613130 on 2022-03-17 |
| OPALS INSTALL by HS&S - Job No:VR041613130 on 2022-03-17 |
| Standard WiFi Install - (Broadband) by HS&S - Job No:VR041729247 on 2022-03-17 |
| Standard WiFi Install - (Broadband) by HS&S - Job No:VR041729247 on 2022-03-17 |
| OPALS INSTALL by HS&S - Job No:VR041665578 on 2022-03-18 |
| OPALS INSTALL by HS&S - Job No:VR041665578 on 2022-03-18 |
Thanks
CodePudding user response:
We can try using the SUBSTRING() function in regex mode with the help of a capture group:
SELECT
Subject,
SUBSTRING(Subject FROM 'Job No:([^[:space:]] )') AS ID,
SUBSTRING(Subject FROM '\y[0-9]{4}-[0-9]{2}-[0-9]{2}$') AS date
FROM yourTable;
CodePudding user response:
You could nest SPLIT_PART function as well:
with my_data as (
select 'OPALS INSTALL by HS&S - Job No:VR041613130 on 2022-03-17' as col1 union all
select 'Standard WiFi Install - (Broadband) by HS&S - Job No:VR041729247 on 2022-03-17' union all
select 'OPALS INSTALL by HS&S - Job No:VR041665578 on 2022-03-18'
)
select col1,
split_part(split_part(col1, 'Job No:', 2), ' ', 1) as job,
split_part(split_part(col1, 'Job No:', 2), ' on ', 2) as date
from my_data;
| col1 | job | date |
|---|---|---|
| OPALS INSTALL by HS&S - Job No:VR041613130 on 2022-03-17 | VR041613130 | 2022-03-17 |
| Standard WiFi Install - (Broadband) by HS&S - Job No:VR041729247 on 2022-03-17 | VR041729247 | 2022-03-17 |
| OPALS INSTALL by HS&S - Job No:VR041665578 on 2022-03-18 | VR041665578 | 2022-03-18 |
