Here is my query:
CREATE FUNCTION dbo.ufn_LastBusinessDayOfMonth (@Dt datetime)
RETURNS datetime
AS
BEGIN
DECLARE @dt2 datetime
DECLARE @Df int
DECLARE @dSat int
DECLARE @dSun int
SELECT
@dt2 = DATEADD(D, -1, DATEADD(m, 1 + DATEDIFF(m, 0, @Dt), 0))
SELECT
@dSat = DATEPART(dw, '2018-01-06') -- Known Saturday
SELECT
@dSun = (@dSat % 7) + 1
SELECT
@dt2 = (
CASE
WHEN DATEPART(dw, @dt2) = @dSun THEN DATEADD(DAY, -2, @dt2)
WHEN DATEPART(dw, @dt2) = @dSat THEN DATEADD(DAY, -1, @dt2)
ELSE @dt2
END)
RETURN @dt2
END