Hi experts,
I am creating a "Year to Date" report and want the users to be able to select the month for the start of the year.
I have created a data set for my "Start Month" parameter as follows:
ELECT CAST(DATENAME(mm, DATEADD(mm, - 12, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(10)) + '-' + CAST(YEAR(DATEADD(mm, - 12, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(4)) AS DateLabel, DATEADD(mm, - 12, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) AS DateValue, 1 AS SortKey UNION ALL SELECT CAST(DATENAME(mm, DATEADD(mm, - 11, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(10)) + '-' + CAST(YEAR(DATEADD(mm, - 11, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(4)) AS DateLabel, DATEADD(mm, - 11, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) AS DateValue, 2 AS SortKey UNION ALL SELECT CAST(DATENAME(mm, DATEADD(mm, - 10, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(10)) + '-' + CAST(YEAR(DATEADD(mm, - 10, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(4)) AS DateLabel, DATEADD(mm, - 10, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) AS DateValue, 3 AS SortKey UNION ALL SELECT CAST(DATENAME(mm, DATEADD(mm, - 9, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(10)) + '-' + CAST(YEAR(DATEADD(mm, - 9, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(4)) AS DateLabel, DATEADD(mm, - 9, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) AS DateValue, 4 AS SortKey UNION ALL SELECT CAST(DATENAME(mm, DATEADD(mm, - 8, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(10)) + '-' + CAST(YEAR(DATEADD(mm, - 8, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(4)) AS DateLabel, DATEADD(mm, - 8, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) AS DateValue, 5 AS SortKey UNION ALL SELECT CAST(DATENAME(mm, DATEADD(mm, - 7, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(10)) + '-' + CAST(YEAR(DATEADD(mm, - 7, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(4)) AS DateLabel, DATEADD(mm, - 7, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) AS DateValue, 6 AS SortKey UNION ALL SELECT CAST(DATENAME(mm, DATEADD(mm, - 6, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(10)) + '-' + CAST(YEAR(DATEADD(mm, - 6, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(4)) AS DateLabel, DATEADD(mm, - 6, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) AS DateValue, 7 AS SortKey UNION ALL SELECT CAST(DATENAME(mm, DATEADD(mm, - 5, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(10)) + '-' + CAST(YEAR(DATEADD(mm, - 5, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(4)) AS DateLabel, DATEADD(mm, - 5, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) AS DateValue, 8 AS SortKey UNION ALL SELECT CAST(DATENAME(mm, DATEADD(mm, - 4, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(10)) + '-' + CAST(YEAR(DATEADD(mm, - 4, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(4)) AS DateLabel, DATEADD(mm, - 4, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) AS DateValue, 9 AS SortKey UNION ALL SELECT CAST(DATENAME(mm, DATEADD(mm, - 3, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(10)) + '-' + CAST(YEAR(DATEADD(mm, - 3, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(4)) AS DateLabel, DATEADD(mm, - 3, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) AS DateValue, 10 AS SortKey UNION ALL SELECT CAST(DATENAME(mm, DATEADD(mm, - 2, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(10)) + '-' + CAST(YEAR(DATEADD(mm, - 2, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(4)) AS DateLabel, DATEADD(mm, - 2, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) AS DateValue, 11 AS SortKey UNION ALL SELECT CAST(DATENAME(mm, DATEADD(mm, - 1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(10)) + '-' + CAST(YEAR(DATEADD(mm, - 1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0))) AS varchar(4)) AS DateLabel, DATEADD(mm, - 1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)) AS DateValue, 12 AS SortKey ORDER BY SortKey
It returns 3 columns for for each month for the previous 3 months: DateLabel, DateValue and SortKey
My date value returns a date in the format: 2011-10-01 00:00:00.000
I have set my label as the DateLabel and value as the DateValue.
When I run the report, the date passed to SQL server is reformatted as dd/mm/yyyy hh:mm:ss (e.g. '1/06/2012 12:00:00 AM')
This is then reinterpreted again by SQL - incorrectly.
My report language is set to en-AU (i.e. Australia with dates formatted dd/mm/yyyy)
Please help.
Cheers, Clay