I have a SQL Server table which has multiple rows as below. Each row has one delimiter '^'. I want to make a separate column from each row.
Let's say this is the original table:
Sourcetable (only one column)
StringVal
-------------------------------------------------
57^H:\ ^ 200^Test ^2018-09-19 08:20:01.000
8^T:\ ^ 88^Test1 ^2018-09-1 08:00:01.000
33^D:\ ^ 40^Test2 ^2018-10-1 08:10:01.000
My request is to select columns as below in output by using above table
DestinationTable (with 5 columns)
FreeSpace | Total | Drive | Server | Date
----------+----------+-------+--------+--------------------------
57 | 200 | H:\ | Test | 2018-09-19 08:20:01.000
8 | 88 | T:\ | Test1 | 2018-09-1 08:00:01.000
33 | 40 | D:\ | Test2 | 2018-10-1 08:10:01.000
Note: String from source table also contains null values. Also that string contains many blank places within it without any order. So that also need to be handled.
I have tried to use string function but its giving me values for only up to the first delimiter and skipping further.
SELECT
Substring(string, 1, Charindex('^', string) - 1) as Name,
Substring(string, 4, Charindex('^', n) + 3) as Name1
FROM
Sourcetable
I expect output as below with 5 different columns
FreeSpace | Total | Drive | Server | Date
----------+----------+-------+--------+--------------------------
57 | 200 | H:\ | Test | 2018-09-19 08:20:01.000
8 | 88 | T:\ | Test1 | 2018-09-1 08:00:01.000
33 | 40 | D:\ | Test2 | 2018-10-1 08:10:01.000