В чем разница между этими двумя операторами AND на SQL сервере? - PullRequest
0 голосов
/ 22 апреля 2020
AND (
     (mmd.TerminationDate IS NOT NULL AND mmd.TerminationDate >= '01-Jan-2019')
     OR mmd.TerminationDate IS NULL
)
AND (mmd.TerminationDate IS NULL OR mmd.TerminationDate >= '01-Jan-2020')

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Предполагая, что буквальные даты должны быть одинаковыми, оба условия выполняют одно и то же, то есть разрешают даты, которые либо равны нулю, либо превышают 1 января.

Первое выражение неоправданно избыточно:

(mmd.TerminationDate is NOT NULL and mmd.TerminationDate >= '01-Jan-2019') 
or mmd.TerminationDate is null)

Если TerminationDate равно null, то оно не может быть больше, чем 1 января, поэтому первое подусловие фактически сводится к mmd.TerminationDate >= '01-Jan-2019'.

Несвязанное примечание: хотя SQL Сервер достаточно гибок в понимании форматов даты, я бы использовал более стандартный формат для представления первого января, например:

mmd.TerminationDate is Null OR mmd.TerminationDate >= '2019-01-01'
0 голосов
/ 22 апреля 2020

Первая часть:

AND ((mmd.TerminationDate NOT NULL и mmd.TerminationDate> = '01 -Jan-2019 ') или mmd.TerminationDate is null)

Здесь он проверяет две вещи: (mmd.TerminationDate NOT NULL и mmd.TerminationDate> = '01 -Jan-2019 ') оба эти условия должны быть истинными. В противном случае второе условие (mmd.TerminationDate равно null) должно быть true.

(mmd.TerminationDate NOT NULL и mmd.TerminationDate> = '01 -Jan-2019 '): он проверяет, что дата завершения не должна быть нулевой, а дата завершения должна быть равна или больше 01 января 2019 года. Оба эти условия должны быть истинными, в противном случае проверка не будет выполнена.

Вторая часть после 'или':

(mmd.TerminationDate is null): это подтверждает, что дата завершения не должна быть null, в этом столбце должно быть любое значение даты.

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

...