#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. Большое спасибо за вашу помощь. Я попробовал это, и он отфильтровал нужную мне дату