I have a dataset that has a string column as shown below:
| StringCol |
|---|
| abcd_45dl/beta3,test |
| a56d/beta_46ab |
I would like to split each fragment at every special character such as (/,-_^. etc). Currently I am using the following line but this only gives me the first fragment.
SUBSTRING(terms, 0, PATINDEX('%[-!?@#$%^&*()_ =<>.:;/|\]%', terms))
The desired output would like like this:
| StringCol | StringPc |
|---|---|
| abcd_45dl/beta3,test | abcd |
| abcd_45dl/beta3,test | 45dl |
| abcd_45dl/beta3,test | beta3 |
| abcd_45dl/beta3,test | test |
| a56d/beta_46ab | a56d |
| a56d/beta_46ab | beta |
| a56d/beta_46ab | 46ab |
CodePudding user response:
If you're using SQL Server 2017 it provides translate that can help here combined with string_split:
with sample as (
select 'abcd_45dl/beta3,test' StringCol union all
select 'a56d/beta_46ab'
)
select *
from sample
cross apply String_Split(Translate(StringCol,'_/',',,'),',')
