Это должно сработать, и, ради интереса, я настроил его так, чтобы он работал даже независимо от того, где даты появляются в строке.
DECLARE @string VARCHAR(1000) = 'Blah, blah... yadda, yadda... 31-Jan-2019 to 30-Jan-2020!!!'
--'Descr = ANY TEXT 31-Jan-2019 to 30-Jan-2020';
DECLARE @CycleBeginDate DATE = '01/01/2020';
DECLARE @CycleEndDate DATE = '12/31/2022';
SELECT NewString = STUFF(STUFF(@string,pos.D1,11,f.D1),pos.D1+15,11,f.D2)
FROM (VALUES('%[0-9][0-9]-[A-Z][a-z][a-z]-2[0-9][0-9][0-9]%',
REPLACE(CONVERT(VARCHAR(11),@CycleBeginDate,106),' ','-'),
REPLACE(CONVERT(VARCHAR(11),@CycleEndDate,106),' ','-'))) AS f(DPat,D1,D2)
CROSS APPLY (VALUES(PATINDEX(f.DPat,@string))) AS pos(D1);
Возвращает:
NewString
------------------------------------------------------------
Blah, blah... yadda, yadda... 01-Jan-2020 to 31-Dec-2022!!!