2017-03-17 78 views
1

我在MS SQL Server中運行以下SQL語句:如何將日期範圍納入WHERE子句中?

SELECT 
    COUNT(*) 
FROM 
    [dbo].[QueueAuditTrail] with(nolock) 
WHERE 
    (queueenddatetime >= '2017-03-17 14:00:00.000' 
    AND queueenddatetime < '2017-03-17 16:36:00.000') 
    AND queuetype = 7 
GROUP BY 
    queuetype 
HAVING 
    COUNT(queuetype) < 100000; 

queueenddatetime列是UTC格式的時間戳。此SQL語句適用於給定的時間範圍;然而,我想配置WHERE聲明以反映「大於或等於當前UTC時間減去20分鐘」和「小於當前UTC時間」之間的時間範圍(使用「YYYY-MM-DD hh:mm :ss.xxx「)格式。如何才能做到這一點?

+1

您正在使用什麼數據庫管理系統? MySQL,Oracle ...? –

+0

我不明白這個查詢中'''group by'''和''having having'''子句的需要。 – Anand

+0

設置[壞習慣踢 - 把NOLOCK無處不在](http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - 它是*不推薦*到處使用 - 完全相反! –

回答

2

這看起來像sql-server給我。

使用dateadd()sysutcdatetime()

select count(*) 
from [dbo].[QueueAuditTrail] with(nolock) 
where queueenddatetime >= dateadd(minute,-20,sysutcdatetime()) 
    and queueenddatetime < sysutcdatetime() 
    and queuetype = 7 
group by queuetype 
having count(queuetype) < 100000 
; 
+0

這兩個參數正是我所需要的。感謝您的輸入! –

+0

@ B.Jice高興地幫忙! – SqlZim