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        ║          ║          ║
╚════════════════╩══════════╩══════════╩══════════╩══════════╩══════════╝