Reputation: 9670
How can this code be fixed, so it doesn't break in January? I believe this part is the bug:
(Month(Getdate()) - 1
SQL:
AND UOnline.maxstamp > dbo.Udf_converttotimeinterval(
Cast(Cast(Year(Getdate()) AS VARCHAR(4))
+ RIGHT('0' + Cast((Month(Getdate()) - 1) AS VARCHAR(2)), 2)
+ RIGHT('0' + Cast(1 AS VARCHAR(2)), 2) AS DATETIME), 'ss')
AND UOnline.maxstamp < dbo.Udf_converttotimeinterval(
Cast(Cast(Year(Getdate()) AS VARCHAR(4))
+ RIGHT('0' + Cast(Month(Getdate()) AS VARCHAR(2)), 2)
+ RIGHT('0' + Cast(1 AS VARCHAR(2)), 2) AS DATETIME), 'ss')
The User Defined Function, if anyone needs it:
USE [XXX]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/**** UDF_ConvertToTimeInterval ****/
ALTER FUNCTION [dbo].[UDF_ConvertToTimeInterval](@VALUE DATETIME,
@INVERVALTYPE VARCHAR(2))
RETURNS BIGINT WITH SCHEMABINDING AS
BEGIN
IF @INVERVALTYPE IS NOT NULL
Begin
If Upper(@INVERVALTYPE) = 'S' OR Upper(@INVERVALTYPE) = 'SS'
RETURN DATEDIFF(SECOND, CONVERT(DATETIME, '01/01/1970', 101),
CONVERT(DATETIME, @VALUE, 101))
If Upper(@INVERVALTYPE) = 'MI' OR Upper(@INVERVALTYPE) = 'N'
RETURN DATEDIFF(MINUTE, CONVERT(DATETIME, '01/01/1970', 101),
CONVERT(DATETIME, @VALUE, 101))
If Upper(@INVERVALTYPE) = 'H' OR Upper(@INVERVALTYPE) = 'HH'
RETURN DATEDIFF(HOUR, CONVERT(DATETIME, '01/01/1970', 101),
CONVERT(DATETIME, @VALUE, 101))
If Upper(@INVERVALTYPE) = 'D' OR Upper(@INVERVALTYPE) = 'DD'
RETURN DATEDIFF(DAY, CONVERT(DATETIME, '01/01/1970', 101),
CONVERT(DATETIME, @VALUE, 101))
If Upper(@INVERVALTYPE) = 'M' OR Upper(@INVERVALTYPE) = 'MM'
RETURN DATEDIFF(MONTH, CONVERT(DATETIME, '01/01/1970', 101),
CONVERT(DATETIME, @VALUE, 101))
If Upper(@INVERVALTYPE) = 'Y' OR Upper(@INVERVALTYPE) = 'YY'
RETURN DATEDIFF(YEAR, CONVERT(DATETIME, '01/01/1970', 101),
CONVERT(DATETIME, @VALUE, 101))
Else
Return Null
end
Else
Return null
Return null
END
Upvotes: 0
Views: 663
Reputation: 4187
Simply substracting from a Month / Day is usually a bad idea... instead of
(Month(Getdate()) - 1
try the following
MONTH(DATEADD(MONTH, -1, GETDATE()))
Upvotes: 1