Check it out.
It will work starting from SQL Server 2017 onwards.
If needed, it is very easy to make it work on SQL Server 2012 onwards.
SQL
-- DDL and sample data population, start
DECLARE @tbl_a TABLE (ID INT IDENTITY PRIMARY KEY, out_days VARCHAR(100));
INSERT INTO @tbl_a (out_days) VALUES
('MondayTuesdayWednesdayThursdayFriday'),
('MondayTuesdayWednesday');
DECLARE @tbl_b TABLE (ID INT IDENTITY PRIMARY KEY, WeekDayName VARCHAR(20), abbr CHAR(3));
INSERT INTO @tbl_b (WeekDayName, abbr) VALUES
('Sunday', 'Sun'),
('Monday', 'Mon'),
('Tuesday', 'Tue'),
('Wednesday', 'Wed'),
('Thursday', 'Thu'),
('Friday', 'Fri'),
('Saturday', 'Sat')
-- DDL and sample data population, end
-- just to see
SELECT * FROM @tbl_a;
SELECT * FROM @tbl_b;
DECLARE @WeekDayName VARCHAR(20), @ReplaceWith CHAR(3)
, @openBracket CHAR(1) = '[', @closeBracket CHAR(1) = ']'
, @RowCount INT = (SELECT COUNT(*) FROM @tbl_b);
DECLARE @separator CHAR(2) = @closeBracket + @openBracket;
WHILE @RowCount > 0 BEGIN
SELECT @WeekDayName=WeekDayName, @ReplaceWith=abbr
FROM @tbl_b
ORDER BY ID DESC OFFSET @RowCount - 1 ROWS FETCH NEXT 1 ROWS ONLY;
-- do whatever needed, apply any logic, call stored procedures, etc.
UPDATE @tbl_a
SET out_days = REPLACE(out_days, @WeekDayName, CONCAT(@openBracket, @ReplaceWith, @closeBracket))
SET @RowCount -= 1;
END
;WITH rs AS
(
SELECT *
, TRY_CAST('<root><r>' +
REPLACE(TRIM('[]' FROM out_days), @separator, '</r><r>') +
'</r></root>' AS XML) AS xmldata
FROM @tbl_a
)
SELECT ID, out_days as [before]
, rs.xmldata
, xmldata.query('concat((/root/r[1]/text())[1], "-", (/root/r[last()]/text())[1])')
.value('.', 'CHAR(7)') AS out_days
FROM rs;
Output
+----+---------------------------+----------+
| ID | before | out_days |
+----+---------------------------+----------+
| 1 | [Mon][Tue][Wed][Thu][Fri] | Mon-Fri |
| 2 | [Mon][Tue][Wed] | Mon-Wed |
+----+---------------------------+----------+