SQL Server:查询一周的特定时间和我们

时间:2017-12-15 13:53:29

标签: sql-server-2008

我需要运行一个根据时间和日期返回数据的查询。

  • 在一周内,它将从17:00到09:00返回数据。
  • 在周末期间,它将返回00:00至23:59之间的数据

数据将匹配数值

以下是我尝试过但返回的数据没有考虑数值

SELECT 
    I3TimeStampGMT, DNIS, AssignedWorkGroup, LocalName, RemoteNumber, 
    CallDurationSeconds
FROM
    CIC_Prod.dbo.calldetail_viw 
WHERE 
    (I3TimeStampGMT > '2017-12-01' 
    AND I3TimeStampGMT <= DATEADD(day,1,'2017-12-05') 
    AND (DATEPART(HH,I3TimeStampGMT) IN (18, 07)
         OR (DATEPART(HH,I3TimeStampGMT) = 17 AND DATEPART(MI,I3TimeStampGMT) >= 00) 
         OR (DATEPART(HH,I3TimeStampGMT) = 08 AND DATEPART(MI,I3TimeStampGMT) <= 59)
        )
    AND DATEPART(dw,I3TimeStampGMT) >= 2 AND DATEPART(dw,I3TimeStampGMT) <= 6
        --sun(1)-mon(2)-tue(3)-wed(4)-thu(5)-fri(6)-sat(7)
        )
    OR  I3TimeStampGMT > '2017-12-01' AND I3TimeStampGMT <= DATEADD(day,1,'2017-12-05')
    and (
        DATEPART(HH,I3TimeStampGMT) IN (18, 07)
        OR (DATEPART(HH,I3TimeStampGMT) = 17 AND DATEPART(MI,I3TimeStampGMT) >= 00) 
        OR (DATEPART(HH,I3TimeStampGMT) = 08 AND DATEPART(MI,I3TimeStampGMT) <= 59)
        )
    AND DATEPART(dw,I3TimeStampGMT) >= 7 AND DATEPART(dw,I3TimeStampGMT) <= 7


AND
LineId = 'SIP-100-UK'
AND(
DNIS = '4910045'
OR
DNIS = '4910044'
OR
DNIS = '4910043'
OR
DNIS = '4910025'
OR
DNIS = '4910024'
OR
DNIS = '4910023'
OR
DNIS = '4910021'
OR
DNIS = '4910026'
OR
DNIS = '4910019'
OR
DNIS = '4910022'
OR
DNIS = '4910020'
)

1 个答案:

答案 0 :(得分:0)

您的过滤器是使用ANDOR制作的,如果OR中的某个条件为真,其余条件应为truefalse,则没关系。

为了考虑数字值,应该将AND添加到之前的条件中,因此您需要另外一对括号,我用--<<<-----证明:

SELECT 
    I3TimeStampGMT, DNIS, AssignedWorkGroup, LocalName, RemoteNumber, 
    CallDurationSeconds
FROM
    CIC_Prod.dbo.calldetail_viw 
WHERE 
( --<<<------------------------------------------------------------------------------
    (I3TimeStampGMT > '2017-12-01' 
    AND I3TimeStampGMT <= DATEADD(day,1,'2017-12-05') 
    AND (DATEPART(HH,I3TimeStampGMT) IN (18, 07)
         OR (DATEPART(HH,I3TimeStampGMT) = 17 AND DATEPART(MI,I3TimeStampGMT) >= 00) 
         OR (DATEPART(HH,I3TimeStampGMT) = 08 AND DATEPART(MI,I3TimeStampGMT) <= 59)
        )
    AND DATEPART(dw,I3TimeStampGMT) >= 2 AND DATEPART(dw,I3TimeStampGMT) <= 6
        --sun(1)-mon(2)-tue(3)-wed(4)-thu(5)-fri(6)-sat(7)
        )
    OR  I3TimeStampGMT > '2017-12-01' AND I3TimeStampGMT <= DATEADD(day,1,'2017-12-05')
    and (
        DATEPART(HH,I3TimeStampGMT) IN (18, 07)
        OR (DATEPART(HH,I3TimeStampGMT) = 17 AND DATEPART(MI,I3TimeStampGMT) >= 00) 
        OR (DATEPART(HH,I3TimeStampGMT) = 08 AND DATEPART(MI,I3TimeStampGMT) <= 59)
        )
    AND DATEPART(dw,I3TimeStampGMT) >= 7 AND DATEPART(dw,I3TimeStampGMT) <= 7
)--<<<------------------------------------------------------------------------------

AND
LineId = 'SIP-100-UK'
AND(
DNIS = '4910045'
OR
DNIS = '4910044'
OR
DNIS = '4910043'
OR
DNIS = '4910025'
OR
DNIS = '4910024'
OR
DNIS = '4910023'
OR
DNIS = '4910021'
OR
DNIS = '4910026'
OR
DNIS = '4910019'
OR
DNIS = '4910022'
OR
DNIS = '4910020'
)