/* login requested status ivanov 2020-06-02 (02:00) approved ivanov 2021-11-14 (02:00) 2021-11-16 (02:00) approved ivanov 2020-01-25 (02:00) in progress petrov 2023-05-02 (01:30) 2023-05-03 (01:00) 2023-05-10 (01:30) 2023-05-11 (01:30) 2023-05-19 (01:30) 2023-07-03 (01:00) approved sidorov 2023-10-27 (02:00) 2023-11-01 (01:00) in progress sidorov 2023-08-29 (04:00) approved */ select login, cast(value as varchar(18)) requested, status from (values ('ivanov', '2020-06-02 (02:00)', 'approved'), ('ivanov', '2021-11-14 (02:00) 2021-11-16 (02:00)', 'approved'), ('ivanov', '2020-01-25 (02:00)', 'in progress'), ('petrov', '2023-05-02 (01:30) 2023-05-03 (01:00) 2023-05-10 (01:30) 2023-05-11 (01:30) 2023-05-19 (01:30) 2023-07-03 (01:00)', 'approved'), ('sidorov', '2023-10-27 (02:00) 2023-11-01 (01:00)', 'in progress'), ('sidorov', '2023-08-29 (04:00)', 'approved') ) as t(login, requested, status) cross apply string_split(replace(requested, ') ', '),'), ',');