BigQuery - REGEXP_CONTAINS удаляет значение NULL - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь исключить строки, где веб-сайт содержит xyz и 123. Однако запрос также исключает строки со значением NULL. Таким образом, вместо 4 строк, он возвращает 3 строки, то есть исключено число 6.

Может кто-нибудь сказать, что является причиной проблемы и правильное решение?

Я не хочу использовать NOT IN поскольку мои критерии исключения - длинный список, я думаю, что REGEXP_CONTAINS - единственный выход. Если есть какая-либо другая строковая функция, пожалуйста, предложите.

Используемый запрос:

SELECT number,source,detail,website FROM `tablename` where not REGEXP_CONTAINS(website, r'xyz') and not REGEXP_CONTAINS(website, r'123')

enter image description here

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Функция BigQuery regexp_contains при применении к NULL значениям возвращает NULL. В вашем случае, когда вы применяете операции AND и NOT к значению NULL, значение не изменяется. Несмотря на это, в предложении WHERE значение NULL воспринимается как ложное.

Если вы хотите сохранить значение false, вам следует сделать следующее:

SELECT number,source,detail,website FROM `tablename` where (not REGEXP_CONTAINS(website, r'xyz') and not REGEXP_CONTAINS(website, r'123')) or website is NULL

Надеюсь, это поможет

0 голосов
/ 27 января 2020

Ожидается, что он исключит NULL.

Если вы хотите NULL строки, вам нужно добавить OR LOGI C columns is null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...