Не включать эту конкретную дату в запрос при использовании оператора BETWEEN в SQL Server 2008

#sql #date #sql-server-2008 #filter #between

#sql #Дата #sql-server-2008 #Фильтр #между

Вопрос:

Существует одна конкретная дата, которую я не хочу включать в это, которая является «04/08/2020». Я хочу отфильтровать все записи с начала года до настоящего времени, но не 08.04.2020. Как я могу это сделать?

 SELECT 
     dbo.PID_RespiratorFit.PTIDNum,
     rtrim(acp.LastName)   ', '   rtrim(acp.FirstName) AS Name,
     acp.BadgeID AS ID,
     dbo.Patient.PcFLD01 as Organization,
     dbo.PID_RespiratorFit.Risk AS Exposure, 
     UPPER(dbo.PID_RespiratorFit.Type) AS Mask_Type,
     dbo.PID_RespiratorFit.OHSNotes AS Comments,
     dbo.PID_RespiratorFit.MedicallyClearedDate AS Medically_Cleared,
     dbo.PID_RespiratorFit.TrainingCompletedDate, 
     dbo.PID_RespiratorFit.DateIssued AS N95_Fittest_Completed, 
     dbo.PID_RespiratorFit.Mask AS N95_respirator,
     dbo.PID_RespiratorFit.PAPR,
     dbo.PID_RespiratorFit.PaprFitTestDate AS PAPR_Fittest_Completed,
     dbo.PID_RespiratorFit.Active,
     DATEADD(year, 1, dbo.PID_RespiratorFit.MedicallyClearedDate) AS Compliant_Through
FROM       dbo.PID_RespiratorFit LEFT JOIN 
           dbo.Patient ON dbo.PID_RespiratorFit.PTIDNum = dbo.Patient.PTIDNUM LEFT JOIN
           dbo.aspnet_CustomProfile acp ON dbo.Patient.PGuid = acp.UserId
WHERE (dbo.PID_RespiratorFit.DateIssued BETWEEN '1-1-2020' AND Getdate())
 

тест

Комментарии:

1. Просто используйте оператор between для вашего диапазона и отдельного and <> bad_date

2. Я попробовал это и <> date, но он по-прежнему показывает дату 08.04.2020:(

3. Нам нужно увидеть больше вашего запроса, где он это делает..

4. только что обновлен полный запрос

5. Этот запрос не пытается отфильтровать какую-либо конкретную дату…

Ответ №1:

Используйте стандартные форматы дат! Затем:

 WHERE dbo.PID_RespiratorFit.DateIssued BETWEEN '2020-01-01' AND Getdate() and
      dbo.PID_RespiratorFit.DateIssued <> '2020-04-08'  -- or is that 2020-08-04???
 

Если дата действительно является датой / временем, то используйте:

 WHERE dbo.PID_RespiratorFit.DateIssued BETWEEN '2020-01-01' AND Getdate() and
      CONVERT(DATE, dbo.PID_RespiratorFit.DateIssued) <> '2020-04-08'  -- or is that 2020-08-04???
 

Я также настоятельно рекомендую использовать псевдонимы таблиц, чтобы запрос было намного проще записывать и читать. Например:

 SELECT . . .
FROM dbo.PID_RespiratorFit rf LEFT JOIN 
     dbo.Patient p
     ON rf.PTIDNum = p.PTIDNUM LEFT JOIN
     dbo.aspnet_CustomProfile acp
     ON p.PGuid = acp.UserId
    WHERE rf.DateIssued BETWEEN '2020-01-01' AND Getdate() AND
          CONVERT(DATE, rf.DateIssued) <> '2020-04-08'  -- or is that 2020-08-04???
 

Ответ №2:

Вы можете попробовать следующее — добавление дополнительного условия

     SELECT 
     dbo.PID_RespiratorFit.PTIDNum,
     rtrim(acp.LastName)   ', '   rtrim(acp.FirstName) AS Name,
     acp.BadgeID AS ID,
     dbo.Patient.PcFLD01 as Organization,
     dbo.PID_RespiratorFit.Risk AS Exposure, 
     UPPER(dbo.PID_RespiratorFit.Type) AS Mask_Type,
     dbo.PID_RespiratorFit.OHSNotes AS Comments,
     dbo.PID_RespiratorFit.MedicallyClearedDate AS Medically_Cleared,
     dbo.PID_RespiratorFit.TrainingCompletedDate, 
     dbo.PID_RespiratorFit.DateIssued AS N95_Fittest_Completed, 
     dbo.PID_RespiratorFit.Mask AS N95_respirator,
     dbo.PID_RespiratorFit.PAPR,
     dbo.PID_RespiratorFit.PaprFitTestDate AS PAPR_Fittest_Completed,
     dbo.PID_RespiratorFit.Active,
     DATEADD(year, 1, dbo.PID_RespiratorFit.MedicallyClearedDate) AS Compliant_Through
FROM       dbo.PID_RespiratorFit LEFT JOIN 
           dbo.Patient ON dbo.PID_RespiratorFit.PTIDNum = dbo.Patient.PTIDNUM LEFT JOIN
           dbo.aspnet_CustomProfile acp ON dbo.Patient.PGuid = acp.UserId
WHERE (dbo.PID_RespiratorFit.DateIssued BETWEEN '1-1-2020' AND Getdate())
AND cast(dbo.PID_RespiratorFit.DateIssued as date)<>'2020-04-08'
 

Комментарии:

1. Я попробовал это, и он по-прежнему показывает дату 08.04.2020

2. опубликуйте свой полный запрос с примерами данных @Ph14Woozies. Тогда будет полезно выяснить, почему это не работает

3. @Ph14Woozies, я обновил ответ, вам нужно привести свой столбец DateTime к дате для 2-го условия — теперь вы можете chk

4. Большое спасибо за вашу помощь. Я попробовал это, и он отфильтровал нужную мне дату