Исключите пустые и нулевые значения в предложении WHERE
Много раз я должен выполнить этот запрос:
select * from users where name is not null and name != ''
Есть ли лучший способ сделать это. Мне нужно больше производительности, любое предложение. Я думаю, это очень распространено, поэтому может быть какая-то скомпилированная функция, которая будет что-то вроде
select * from users where name is present()
Использование PostgreSQL 9 версии.
2 ответа
Решение
Для любого x
, null != x
будет null
а также null
не является true
, Это означает, что вы можете просто игнорировать NULL в вашем случае и сказать:
select * from users where name != ''
Вы также можете преобразовать NULL в пустые строки, используя COALESCE, если вам это понятнее:
select * from users where coalesce(name, '') != ''
Конечно что coalesce
звонок не бесплатный.
Демо: http://sqlfiddle.com/
Вы можете использовать NULLIF:
SELECT *
FROM USERS
WHERE NULLIF(NAME,'') IS NOT NULL