Hi @Debilon ,
Please try the following solution.
There is an assumption that each name has 3 words/parts.
SQL
-- DDL and sample data population, start
DECLARE @tbl AS TABLE (id int identity(1,1) PRIMARY KEY,tokens nvarchar(max));
INSERT @tbl (tokens) VALUES
('BAIL HALEN M; LYNN DRAGON L; LYNN WAYLON Z'),
('BRIDSHAW ERWIN DEIUL; BRIDSHAW RON CARL'),
('CROOK BATTY M WALSH DELLA J');
-- DDL and sample data population, end
DECLARE @separator CHAR(1) = SPACE(1);
SELECT *
, c.query('data(/root/r[position() le 3])').value('.','VARCHAR(100)') AS Col1
, c.query('data(/root/r[position() = (4,5,6)])').value('.','VARCHAR(100)') AS Col2
, c.query('data(/root/r[position() ge 7])').value('.','VARCHAR(100)') AS Col3
FROM @tbl AS t
CROSS APPLY (SELECT TRY_CAST('<root><r>' +
REPLACE(REPLACE(tokens,';',''), @separator, '</r><r>') +
'</r></root>' AS XML)) AS t1(c)
WHERE tokens NOT LIKE '%AKA%';
Output
+----+--------------------------------------------+----------------------+-------------------+---------------+
| id | tokens | Col1 | Col2 | Col3 |
+----+--------------------------------------------+----------------------+-------------------+---------------+
| 1 | BAIL HALEN M; LYNN DRAGON L; LYNN WAYLON Z | BAIL HALEN M | LYNN DRAGON L | LYNN WAYLON Z |
| 2 | BRIDSHAW ERWIN DEIUL; BRIDSHAW RON CARL | BRIDSHAW ERWIN DEIUL | BRIDSHAW RON CARL | |
| 3 | CROOK BATTY M WALSH DELLA J | CROOK BATTY M | WALSH DELLA J | |
+----+--------------------------------------------+----------------------+-------------------+---------------+