Reputation: 69
I'm getting an error when running this query:
SELECT '06/30/' +
CASE WHEN GETDATE() BETWEEN Cast('1/01/' + YEAR(GETDATE()) + ' 12:01:01' As DateTime) And Cast('6/30/' + YEAR(GETDATE()) + ' 12:01:01' as DateTime)
THEN CAST(
YEAR(DATEADD(YY, 2, GETDATE())) AS VARCHAR(4))
WHEN GETDATE() BETWEEN Cast('7/01/' + YEAR(GETDATE()) + ' 12:01:01' As DateTime) And Cast('12/31/' + YEAR(GETDATE()) + ' 12:01:01' as DateTime)
THEN CAST(
YEAR(DATEADD(YY, 3, GETDATE())) AS VARCHAR(4))
END
AS DateEnding FOR XML RAW
Conversion failed when converting the varchar value '1/01/' to data type int.
Upvotes: 1
Views: 284
Reputation: 3522
JamieSee is correct about casting it to VARCHAR(4). A better way would be to format using non-ambiguous dates. SQL will always work out 6/30/2012 as 30th June 2012, but is 1/7/2012 the 1st July (US Format) or 7th Jan (UK Format)?
SELECT '06/30/' +
CASE WHEN GETDATE() BETWEEN Cast(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '-01-01 12:01:01' As DateTime) And Cast(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '-06-30 12:01:01' as DateTime)
THEN CAST(
YEAR(DATEADD(YY, 2, GETDATE())) AS VARCHAR(4))
WHEN GETDATE() BETWEEN Cast(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '-07-01 12:01:01' As DateTime) And Cast(CAST(YEAR(GETDATE()) AS VARCHAR(4)) + '-12-31 12:01:01' as DateTime)
THEN CAST(
YEAR(DATEADD(YY, 3, GETDATE())) AS VARCHAR(4))
END
AS DateEnding FOR XML RAW
Upvotes: 0
Reputation: 13020
You need to CAST or CONVERT your YEAR(GETDATE())
to varchar(4) when trying to combine it with text, otherwise, it attempts to convert the text to an int instead.
SELECT '06/30/' +
CASE WHEN GETDATE() BETWEEN Cast('1/01/' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + ' 12:01:01' As DateTime) And Cast('6/30/' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + ' 12:01:01' as DateTime)
THEN CAST(
YEAR(DATEADD(YY, 2, GETDATE())) AS VARCHAR(4))
WHEN GETDATE() BETWEEN Cast('7/01/' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + ' 12:01:01' As DateTime) And Cast('12/31/' + CAST(YEAR(GETDATE()) AS VARCHAR(4)) + ' 12:01:01' as DateTime)
THEN CAST(
YEAR(DATEADD(YY, 3, GETDATE())) AS VARCHAR(4))
END
AS DateEnding FOR XML RAW
Upvotes: 2