Рассмотрение пробелов в строке SQL как null

Я предполагал получить все данные из таблицы, в которой столбец «Адрес» не равен нулю, поэтому я сделал заявление, которое выглядело так ...

Выберите * из таблицы, где адрес не равен нулю

К сожалению, в столбце «Адрес» есть строки с пробелами, поэтому SQL не может считать его пустым.

Как я могу отображать строки, в которых адрес не равен нулю? Спасибо :)


person Emmanuel Gabion    schedule 16.11.2012    source источник


Ответы (1)


Большинство систем баз данных имеют функцию NULLIF (). Он был определен вместе с COALESCE () в стандарте ANSI SQL-99, если не ранее. Он реализован как минимум в SQL Server, Oracle, PostgreSQL, MySQL, SQLite, DB2, Firebird.

Select * from Table where NULLIF(Address,'') is not null

Но мне это нравится больше

Select * from Table where Address > ''

Он убивает нули и пустые строки за один раз. Он даже исключает строки, полностью состоящие из пробелов ('', '' и т. Д.). Он также сохраняет SARGability.

person RichardTheKiwi    schedule 16.11.2012
comment
@RichardTheKiwi: Postgres ведет себя немного иначе: sql-fiddle. Не знаю, как это настроить. - person ypercubeᵀᴹ; 16.11.2012
comment
И Oracle будет рассматривать '' как NULL, поэтому (мне тоже нравится этот) where Address > '' обрежет все строки. - person ypercubeᵀᴹ; 16.11.2012
comment
Я бы назвал это ошибкой. postgresql.org/docs/8.0/static/datatype-character.html заявляет Trailing spaces are disregarded when comparing two values of type character, and they will be removed when converting a character value to one of the other string types. Note that trailing spaces are semantically significant in character varying and text values. Я почти уверен, что они не должны иметь значения как для varchar, так и для char. - person RichardTheKiwi; 16.11.2012