Not sure where you copied this code from, but it looks like it came from a web site that translated minus signs (-
) to long dashes (β
). You can see this in Management Studio if you turn IntelliSense on:
Here is the easy way to compare the same range as the year before:
DECLARE @startdate date = '20170101',
@enddate date = '20170212';
SELECT @startdate, DATEADD(YEAR, -1, @startdate),
@enddate, DATEADD(YEAR, -1, @enddate);
This compares the same period as last year, but I'm not sure that's what you're after since you are also using the zero date and datediff
- not clear why. It does not account for leap year; you'll need to define what should happen if the range involves 2/29 either this year or last year.
When you use those dates in a query, don't do this subtracting 3 milliseconds nonsense - it only leads to problems. If you're trying to get all the data for February 12th even if it has time, then use < DATEADD(DAY, 1, @enddate)
. Also, don't use YY
, just type out YEAR
. It is also far easier to get the full range of last year:
-- for SQL Server 2012+
WHERE col >= DATEFROMPARTS(YEAR(@startdate)-1, 1, 1)
AND col < DATEFROMPARTS(YEAR(@startdate), 1, 1);
-- for older, unsupported versions:
WHERE col >= DATEADD(YEAR, YEAR(@startdate)-1901, '19000101'),
AND col < DATEADD(YEAR, YEAR(@startdate)-1900, '19000101');
To sum up:
DECLARE @startdate date = '20170101',
@enddate date = '20170212';
-- sales from that period this year:
SELECT SUM(some_column) FROM dbo.SomeTable
WHERE some_datetime_column >= @startdate
AND some_datetime_column < DATEADD(DAY, 1, @enddate);
-- sales from same period previous year (again, not accounting for leap special case):
SELECT SUM(some_column) FROM dbo.SomeTable
WHERE some_datetime_column >= DATEADD(YEAR, -1, @startdate)
AND some_datetime_column < DATEADD(YEAR, -1, DATEADD(DAY, 1, @enddate));
-- sales from all of previous year:
SELECT SUM(some_column) FROM dbo.SomeTable
WHERE some_datetime_column >= DATEADD(YEAR, YEAR(@startdate)-1901, '19000101'),
AND some_datetime_column < DATEADD(YEAR, YEAR(@startdate)-1900, '19000101');
Suggested reading:
Best Answer
Note: As far as I am aware, you cannot create a database trigger as you are currently attempting to do...
That being said, your 2 error messages, "Incorrect syntax near 'INSERT'" and "Incorrect syntax near 'END'", are due to you using square brackets
[]
and missing a startingBEGIN
respectively.Your Code (with comments):
Working Example:
Hope this helps.