У меня есть слой формы с атрибутом, содержащим NULL
значения, к которым я хотел бы применить фильтр для значений, отличных от NULL
.
Используя доступный графический интерфейс для такой конструкции запроса, можно интуитивно попробовать
"obj_art" != NULL
Что означает «дать мне все функции с атрибутом« obj_art », отличным от NULL
» (это число определенно больше 0). Тестирование этого запроса дает странный результат с моей точки зрения:
Итак, что я узнал, так это то, что я могу достичь этого, используя
"obj_art" IS NOT NULL
Вопрос в том, в чем разница между != NULL
и IS NOT NULL
?
!=
не означает «нет»; это означает «не равно».IS NOT
означает «нет», так что я думаю, что это совершенно интуитивно :)NULL
это не является ценностью , я бы сказал , что это интуитивно , чтобы попытаться использовать=
или!=
как то , как вы оцениваете любое другое значение. Пока вы не узнаете, чтоNULL
это значение не является интуитивно понятным,IS NOT
а не используется!=
. Многие не знают, что такое наNULL
самом деле.NULL
есть в списке значений (см. Выше), и, следовательно, рассматривается как «нормальное» значение. И кнопки нетIS NULL
, или я пропустил такую ?! Таким образом, когда мы просто набираем такой запрос со знанием дела, к этомуNULL
нужно относиться особым образом, мы могли бы обсудить интуицию, но, конечно, не в контексте ЭТОГО GUI.Ответы:
Отказ от ответственности: поскольку синтаксис фильтрации в QGIS работает с SQL, я предполагаю, что здесь применяются правила SQL. Я не совсем уверен, правильно ли это, но это кажется логичным и объясняет поведение.
Фильтр работает с SQL, поэтому вы должны искать там ответ.
Короче говоря, при использовании логического оператора в сочетании с
null
, результат всегдаnull
. Но для проверкиnull
SQL поставляется сIS (NOT)
функцией сравнения, которая позволяет использовать его для предполагаемой фильтрации.Проверьте ответ Богемиана на stackoverflow для более углубленного обсуждения.
источник
NULL
это не значение, поэтому он не может быть равно=
или не равно!=
ничего. Это не то же самое, что ноль,0
который является значением.A
NULL
означает, что в ячейке, которую вы просматриваете, не было записано никакого значения. Чтобы проверить, существует ли значение, вы спрашиваете ячейкуIS NULL
илиIS NOT NULL
IS NULL
проверяет, пуста ли ячейкаIS NOT NULL
проверяет, не является ли ячейка пустойЕсли у вас есть какие - то записи , в которых значения являются
One
,Two
,Three
и все остальное ,NULL
и вы хотите , чтобы найти все , что неTwo
вы должны были бы использовать что - то вродеvalue != 'Two' OR value IS NULL
поскольку значения NULL не возвращаются в запросе равно / не равно. Если вы используете только
value != 'Three'
результат, исключаются всеNULL
записи, так какNULL
это значение не может быть равно или не равно.источник