2017-06-01 50 views
0

當前我的情況聲明基於當月的第一天。修改日期函數基於Where子句SQL Server

SELECT 
[TicketNbr] AS 'Ticket Nbr' 
-- 1st day of this month 
, (CASE WHEN [date_entered] >= DATEADD(day,-1, GETDATE()) THEN 1 ELSE 0 END) AS '1=Opened Within Last 24HR 0=No' 
FROM [v_rpt_Service] WITH(NOLOCK) 
WHERE ([date_entered] >= '2017-04-01T11:24:00.000' AND [date_entered] < '2017-05-01T11:24:00.000') 
GROUP BY [TicketNbr] 

但是我想修改它,所以它會在where子句中調整,因此將根據日期範圍 。 (這可以是任何日期範圍。)

如何在沒有變量的情況下執行此操作?

+0

使用一個變量? – scsimon

+0

小心NOLOCK。這比大多數人意識到的要兇險得多。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –

回答

2

聽起來像是你只需要變量

declare @startDate datetime = '2017-04-01 11:24:00' 
declare @endDate datetime = '2017-05-01 11:24:00' 

SELECT 
[TicketNbr] AS 'Ticket Nbr' 
-- 1st day of this month 
, (CASE WHEN [date_entered] between @startDate and @endDate THEN 1 ELSE 0 END) AS '1=Opened Within Date Range 0= No' 
FROM [v_rpt_Service] WITH(NOLOCK) 
WHERE ([date_entered] >= startDate AND [date_entered] < @endDate) 
GROUP BY [TicketNbr] 
+0

欣賞它,但有沒有辦法做到這一點沒有變數? – Dombey

+0

除了像你在where子句中所做的那樣硬編碼嗎? – scsimon

+0

正確,除了硬編碼它。 – Dombey

-1
SELECT 
[TicketNbr] AS 'Ticket Nbr' 
-- 1st day of this month 
, (CASE WHEN [date_entered] >= DATEADD(day,-1, GETDATE()) THEN 1 ELSE 0 END) AS '1=Opened Within Last 24HR 0=No' 
FROM [v_rpt_Service] WITH(NOLOCK) 
WHERE ([date_entered] >= DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1) AND [date_entered] < DATEFROMPARTS(YEAR(GETDATE()), MONTH(DATEADD(MONTH, 1, GETDATE())) ,1)) 
GROUP BY [TicketNbr] 
+0

但是這會鎖定日期。我的時間範圍可以是從 2017/5/1 - 2017/5/31至2017年2月13日到2017年3月14日的各種日期。 – Dombey

+0

那麼沒有辦法做到這一點沒有變量,因爲你的數據是可變的¬¬ – shop350