Мне нужно знать (и пометить), происходит ли определенное событие в подзапросе после 15:30 (независимо от даты).
С моей настройкой я не смог определить методом пробного использования, который более эффективен (они возвращаются слишком быстро), и план выполнения не помог.
Второй (# 2) кажется мне более эффективным, потому что литерал нужно приводить только один раз (оставляя одну операцию на строку).
Однако иногда подобные операции обманывают, поэтому я надеялся, что кто-нибудь скажет мне, что лучше.
CREATE TABLE #jccTestData([ProcessDate] datetime);
INSERT INTO #jccTestData ([ProcessDate])
VALUES
('2019-03-12 10:23:28.000') ,('2019-03-17 11:22:40.000'), ('2019-03-18 11:25:30.000')
,('2019-03-19 11:42:02.000') ,('2019-03-11 12:45:30.000') ,('2019-03-12 13:14:20.000')
,('2019-03-13 15:20:13.000') ,('2019-03-14 15:29:40.000') ,('2019-03-15 15:29:59.997')
,('2019-03-16 15:30:00.000') ,('2019-03-17 15:30:00.003') ,('2019-03-18 16:25:30.000')
,('2019-03-12 23:59:59.997') ,('2019-03-13 00:00:00.003') ,('2019-03-14 00:00:00.000')
,('2019-03-15 03:14:20.000') ,('2019-03-16 05:20:13.000')
SELECT
[ProcessDate]
, Case When datepart(HH, [ProcessDate]) > 15
OR (datepart(HH, [ProcessDate]) = 15 And datepart(n, [ProcessDate]) >= 30)
Then 'After 3:30 PM'
End As [After 3:30? #1]
, Case When cast([ProcessDate] As time) >= cast('15:30:00' As time)
Then 'After 3:30 PM'
End As [After 3:30? #2]
FROM #jccTestData
ORDER BY [ProcessDate]
DROP TABLE #jccTestData
Второй также кажется более понятным.
Если есть третий вариант, я тоже открыт для этого.
SQL Server 2012+