2017-06-01 49 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