Исключите пустые и нулевые значения в предложении 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
Другие вопросы по тегам