On SQL Server vNext you can take advantage of the TRANSLATE
function to solve this. That version isn't generally available to the public yet but it might be useful one day or to inspire an answer from someone else.
SELECT
REPLACE(TRANSLATE(@ID, '0123456789', SPACE(10)), ' ', '')
+ REPLACE(TRANSLATE(@ID, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', SPACE(52)), ' ', '');
db fiddle link for your three examples in the question.
On SQL Server 2012 you could solve your problem by applying the REPLACE
function 62 times but there may be a more elegant solution:
DECLARE @T table
(
ID varchar(10) NOT NULL
);
INSERT @T
(ID)
VALUES
('a1b2c3'),
('ac2b31'),
('db13a2');
SELECT
-- Remove numerics
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
T.ID,
'0', ''), '1', ''), '2', ''), '3', ''), '4', ''),
'5', ''), '6', ''), '7', ''), '8', ''), '9', '')
+
-- Remove alphas
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
T.ID,
'a', ''), 'b', ''), 'c', ''), 'd', ''), 'e', ''), 'f', ''), 'g', ''),
'h', ''), 'i', ''), 'j', ''), 'k', ''), 'l', ''), 'm', ''), 'n', ''),
'o', ''), 'p', ''), 'q', ''), 'r', ''), 's', ''), 't', ''), 'u', ''),
'v', ''), 'w', ''), 'x', ''), 'y', ''), 'z', ''),
'A', ''), 'B', ''), 'C', ''), 'D', ''), 'E', ''), 'F', ''), 'G', ''),
'H', ''), 'I', ''), 'J', ''), 'K', ''), 'L', ''), 'M', ''), 'N', ''),
'O', ''), 'P', ''), 'Q', ''), 'R', ''), 'S', ''), 'T', ''), 'U', ''),
'V', ''), 'W', ''), 'X', ''), 'Y', ''), 'Z', '')
FROM @T AS T;