I have this T-SQL query in SSMS:
DECLARE @TodaysDate datetime
DECLARE @AsAtDate DATETIME
SET @TodaysDate = GETDATE()
PRINT (DATEPART(WEEKDAY, @TodaysDate))
IF DATEPART(WEEKDAY, @TodaysDate) = 2 -- is today Monday?
SET @AsAtDate = DATEADD(DAY, -3, @TodaysDate) -- Report contains Friday, Saturday & Sunday
ELSE
SET @AsAtDate = DATEADD(DAY, -1, @TodaysDate) -- Report contains last working day
SELECT
*
FROM
(SELECT
--app.short_id,
CONVERT(VARCHAR(11), app.created_at, 105) AS [Date Created],
CONVERT(VARCHAR(11), stat.activity_created, 105) AS [Date Updated],
FROM
Table1 app
LEFT JOIN
Table2 stat ON app.appID = stat.appID
WHERE
stat.activity_created BETWEEN @AsAtDate AND @TodaysDate) T
which doesn't seem to return any data.
but if I change:
SET @AsAtDate = DATEADD(DAY, -1, @TodaysDate)
to:
SET @AsAtDate = DATEADD(DAY, -2, @TodaysDate)
it returns some, and the supposed data that should have been returned even if I didn't have to change the code above. For context, today is September 15th, it should have returned 14th.
This might be helpful in demonstrating the potential issue you're seeing.
There are three SELECT
s.
The first returns values from a DATETIME
column where it's between two dates (which are implicitly converted to date times, with the time portion set to 00:00:00.000
).
The second uses a specific time portion in the WHERE
.
Finally the DATETIME
s are cast to DATE
and compared to DATE
.
;WITH DateTimes AS (
SELECT GETDATE() AS DateTime
UNION ALL
SELECT DATEADD(HOUR,1,DateTime)
FROM DateTimes
WHERE DateTime < DATEADD(DAY,2,GETDATE())
), Dates AS (
SELECT CAST(DateTime AS DATE) AS Date
FROM DateTimes
)
SELECT *, '2023-09-15 AND 2023-09-16'
FROM DateTimes
WHERE DateTime BETWEEN '2023-09-15' AND '2023-09-16'
UNION ALL
SELECT *, '2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997'
FROM DateTimes
WHERE DateTime BETWEEN '2023-09-15 00:00:00.000' AND '2023-09-16 23:59:59.997'
UNION ALL
SELECT *, '2023-09-15 AND 2023-09-16'
FROM Dates
WHERE Date BETWEEN '2023-09-15' AND '2023-09-16';
You can see the difference in the results.
In the first the DATETIME
s filtered by a date don't include anything after midnight on the end date, because it's not between the two literals.
When we add the time, we now get the rows expected, all the DATETIME
s on those two days are returned.
Similarly when we explicitly cast the DATETIME
s to a DATE
and filter by date we get all the rows for both dates.
DateTime | (No column name) |
---|---|
2023-09-15 09:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 10:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 11:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 12:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 13:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 14:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 15:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 16:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 17:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 18:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 19:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 20:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 21:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 22:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 23:32:45.210 | 2023-09-15 AND 2023-09-16 |
2023-09-15 09:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 10:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 11:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 12:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 13:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 14:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 15:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 16:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 17:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 18:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 19:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 20:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 21:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 22:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 23:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 00:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 01:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 02:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 03:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 04:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 05:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 06:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 07:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 08:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 09:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 10:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 11:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 12:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 13:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 14:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 15:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 16:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 17:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 18:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 19:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 20:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 21:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 22:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-16 23:32:45.210 | 2023-09-15 00:00:00.000 AND 2023-09-16 23:59:59.997 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-15 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |
2023-09-16 00:00:00.000 | 2023-09-15 AND 2023-09-16 |