Spotted in the wild…

Spotted in the wild…

CREATE     FUNCTION [dbo].[fnGetInitialDate] (       @Month               int = null,        @Year         int = null,       @CurrentDate datetime)  RETURNS intAS  BEGIN       Declare @ReportDate datetime       Declare @InitialMonth      int           if @month IS null              set @month = Month(Dateadd(m, -1, @CurrentDate))       if @Year IS null              set @Year = Year(Dateadd(m, -1, @CurrentDate))-- NORMALISE Date/*       Select               @Date = StartDateTime,              @DateDiff = AgeInMonths       from              (                     select top 1                           StartDateTime,                           AgeInMonths                     from                           dbo.<censored>                     where                            StartDateTime is not null              ) TA*/       set @ReportDate      = Cast(@Year AS VARCHAR(4)) + '-' +  Right('00' + Cast(@month AS VARCHAR(2)),2) + '-01'       set @InitialMonth = datediff(m, @CurrentDate, @ReportDate)       return @InitialMonthEND

This SQL Server function features:

  • A name that doesn’t tell you anything ✔
  • Comments indicating non-existent functionality ✔
  • Big sections commented out with no explanation ✔
  • Using strings for date arithmetic ✔

After much thought I concluded that this code is functionally equivalent to DATEDIFF(MONTH, GETDATE(), @ReportDate), except you can choose a different year or month for the current time.

This function is still at large on a production database server (names have been suppressed to protect the innocent). Developers are recommended not to approach it as it is considered dangerous, and extremely confusing.