Одна идея с использованием DATEFROMPARTS
(предполагается, что вы используете 2012+, но в 2008 году осталось 4 недели поддержки, предположение " safe " нет?):
SELECT DATEFROMPARTS(YEAR(V.Today),MONTH(V.Today),25),
DATEADD(MONTH,1,DATEFROMPARTS(YEAR(V.Today),MONTH(V.Today),25))
FROM (VALUES(DATEADD(DAY, -25,GETDATE()))) V(Today);
На сегодня это возвращает 2019-05-25
и 2019-06-25
и возвращает правильные значения для вашего примера: Т.е.:
SELECT DATEFROMPARTS(YEAR(V.Today),MONTH(V.Today),25),
DATEADD(MONTH,1,DATEFROMPARTS(YEAR(V.Today),MONTH(V.Today),25))
FROM (VALUES(DATEADD(DAY, -25,'20190628'))) V(Today);