правильная фильтрация дат в SQL

Я пытаюсь выполнить свой запрос, но вытаскиваю только даты на 2020 год, когда я добавляю DatePart (Year, 2020), я не получаю никаких результатов, хотя есть результаты за 2020 год. Формат данных из системы: ГОД-МЕСЯЦ-ДЕНЬ ЧАСЫ:МИН:СЕК:СЕК. может ли кто-нибудь направить меня, где я ошибаюсь?

SELECT   CV3ClientVisit.ClientDisplayName, CV3ClientVisit.CurrentLocation, CV3ClientVisit.IDCode, CV3ClientVisit.VisitStatus, CV3Order.Name, CV3ClientVisit.TypeCode, 
                     CV3User.DisplayName AS [Performed By], CV3OrderTaskOccurrence.PerformedFromDtm AS [Performed When], CV3OrderTaskOccurrence.TouchedBy AS [Cosigned By], 
                     CV3OrderTaskOccurrence.TouchedWhen AS [Cosigned When]
FROM         CV3Client INNER JOIN
                     CV3TaskSignature ON CV3Client.GUID = CV3TaskSignature.ClientGUID INNER JOIN
                     CV3ClientVisit INNER JOIN
                     CV3Order ON CV3ClientVisit.GUID = CV3Order.ClientVisitGUID INNER JOIN
                     CV3OrderTaskOccurrence ON CV3Order.GUID = CV3OrderTaskOccurrence.OrderGUID INNER JOIN
                     CV3TaskStatusHistory ON CV3OrderTaskOccurrence.GUID = CV3TaskStatusHistory.OrderTaskOccurrenceGUID ON CV3Client.GUID = CV3Order.ClientGUID INNER JOIN
                     CV3User ON CV3OrderTaskOccurrence.PerformedProviderGUID = CV3User.GUID
WHERE     (CV3ClientVisit.TypeCode = 'Inpatient Admit') AND (CV3Order.Name = 'insulin lispro sliding scale injectable') AND (CV3ClientVisit.VisitStatus = 'ADM') AND 
                     (CV3OrderTaskOccurrence.TouchedWhen = DATEPART(YEAR, 2020))

person SARAH    schedule 28.01.2020    source источник


Ответы (1)


Если touchedwhen — это дата/время, используйте что-то вроде этого:

(CV3OrderTaskOccurrence.TouchedWhen >= '2020-01-01' and
 CV3OrderTaskOccurrence.TouchedWhen < '2021-01-01' 
)

На самом деле это также будет работать, если значение хранится в виде строки, но я настоятельно рекомендую хранить значения с использованием правильных типов данных.

person Gordon Linoff    schedule 28.01.2020