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

问题描述 投票:0回答:1

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

  • 在一周内,它将从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'
)
sql-server-2008
1个回答
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'
)
© www.soinside.com 2019 - 2024. All rights reserved.