Here is one way to do it in SQL Server
;WITH cte
AS (SELECT Replace(col, '_', '.') + '.' AS col
FROM (VALUES ('Abc_abc_1.2.3'),
('PQRST.abc_1'),
('XY.143_z')) tc (col))
SELECT original_col = col,
column_1=COALESCE(LEFT(col, Charindex('.', col) - 1), ''),
column_2=COALESCE(Substring(col, P1.POS + 1, P2.POS - P1.POS - 1), ''),
column_3=COALESCE(Substring(col, P2.POS + 1, P3.POS - P2.POS - 1), ''),
column_4=COALESCE(Substring(col, P3.POS + 1, P4.POS - P3.POS - 1), ''),
column_4=COALESCE(Substring(col, P4.POS + 1, P5.POS - P4.POS - 1), '')
FROM cte
CROSS APPLY (VALUES (CASE
WHEN Charindex('.', col) >= 1 THEN Charindex('.', col)
END)) AS P1(POS)
CROSS APPLY (VALUES (CASE
WHEN Charindex('.', col, P1.POS + 1) >= 1 THEN Charindex('.', col, P1.POS + 1)
END)) AS P2(POS)
CROSS APPLY (VALUES (CASE
WHEN Charindex('.', col, P2.POS + 1) >= 1 THEN Charindex('.', col, P2.POS + 1)
END )) AS P3(POS)
CROSS APPLY (VALUES (CASE
WHEN Charindex('.', col, P3.POS + 1) >= 1 THEN Charindex('.', col, P3.POS + 1)
END)) AS P4(POS)
CROSS APPLY (VALUES (CASE
WHEN Charindex('.', col, P4.POS + 1) >= 1 THEN Charindex('.', col, P4.POS + 1)
END)) AS P5(POS)
Result:
╔════════════════╦══════════╦══════════╦══════════╦══════════╦══════════╗
║ original_col ║ column_1 ║ column_2 ║ column_3 ║ column_4 ║ column_4 ║
╠════════════════╬══════════╬══════════╬══════════╬══════════╬══════════╣
║ Abc.abc.1.2.3. ║ Abc ║ abc ║ 1 ║ 2 ║ 3 ║
║ PQRST.abc.1. ║ PQRST ║ abc ║ 1 ║ ║ ║
║ XY.143.z. ║ XY ║ 143 ║ z ║ ║ ║
╚════════════════╩══════════╩══════════╩══════════╩══════════╩══════════╝