как я проверяю, является ли столбец пустым или нулевым в mysql

<p>у меня есть столбец в таблице, который может содержать нулевые или пустые значения. как проверить, является ли столбец пустым или пустым в строках, присутствующих в таблице.</p><pre><code>(e.g. null or '' or ' ' or ' ' and ...) </code></pre>

<p>это выберет все строки, где <code>some\_col</code> равен <code>null</code> или <code>''</code> (пустая строка)</p><pre><code>select * from table where some\_col is null or some\_col = ''; </code></pre>

<p>как определено стандартом sql-92, при сравнении двух строк разной ширины более узкое значение заполняется справа пробелами, чтобы сделать его такой же ширины, что и более широкое значение. поэтому все строковые значения, которые полностью состоят из пробелов (включая нулевые пробелы), будут считаться равными, например, </p><pre><code>'' = ' ' is true '' = ' ' is true ' ' = ' ' is true ' ' = ' ' is true etc </code></pre><p>следовательно, это должно работать независимо от того, сколько пробелов составляют значение <code>some\_col</code>:</p><pre><code>select * from t where some\_col is null or some\_col = ' '; </code></pre><p>или более кратко:</p><pre><code>select * from t where nullif(some\_col, ' ') is null; </code></pre>

<p>более короткий способ написать условие:</p><pre><code>where some\_col > '' </code></pre><p>поскольку <code>null > ''</code> создает <code>unknown</code>, это приводит к фильтрации как <code>null</code>, так и пустых строк.</p>

<p>вы можете проверить, является ли столбец нулевым или нет, используя <code>where col is null</code> или <code>where col is not null</code>, например. </p><pre><code>select mycol from mytable where mycol is null </code></pre><p>в вашем примере у вас есть различные перестановки пустого пространства. вы можете удалить пробел, используя <code>trim</code>, и вы можете использовать <code>coalesce</code>, чтобы установить значение null по умолчанию (coalesce вернет первое ненулевое значение из значений, которые вы поддерживаете. </p><p>например </p><pre><code>select mycol from mytable where trim(coalesce(mycol, '') = '' </code></pre><p>этот последний запрос будет возвращать строки, где <code>mycol</code> равен нулю или является любой длиной пробела.</p><p>если вы можете избежать этого, лучше не использовать функцию для столбца в предложении where, поскольку это затрудняет использование индекса. если вы просто хотите проверить, является ли столбец пустым или пустым, вам лучше сделать это:</p><pre><code>select mycol from mytable where mycol is null or mycol = '' </code></pre><p>смотрите <a href="http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function\_trim">trim</a> <a href="http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function\_coalesce">coalesce</a> и <a href="http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator\_is-null">is null</a> для получения дополнительной информации.</p><p>также <a href="http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html">работа с нулевыми значениями</a> из документов mysql</p>

<p>другой метод без где, попробуйте это .. </p><p>выберет как пустые, так и пустые значения </p><pre><code>select isnull(nullif(fieldname,'')) from tablename </code></pre>

<p>я ненавижу грязные поля в моих базах данных. если столбец может быть пустой строкой или пустым, я бы лучше исправил это перед каждым выбором select, например так:</p><pre><code>update mytable set mycolumn=null where mycolumn=''; select * from mytable where mycolumn is null </code></pre><p>это обеспечивает чистоту данных, если по какой-то причине вам не нужно специально различать null и пустой.</p>

<p>пытаться</p><pre><code>select 0 is null , '' is null , null is null -> 0, 0, 1 </code></pre><p>или же</p><pre><code>select isnull(' ') , isnull( null ) -> 0 ,1 </code></pre><p> <a href="http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator\_is-null">ссылка</a> </p>

<p>или </p><pre><code>select if(field1 is null or field1 = '', 'empty', field1) as field1 from tablename </code></pre><p>или же</p><pre><code>select case when field1 is null or field1 = '' then 'empty' else field1 end as field1 from tablename </code></pre>

<p>проверяя значение <code>null or empty</code> для столбца в моем проекте, я заметил, что существует некоторая проблема поддержки в различных базах данных.</p><p><em>каждая база данных не поддерживает<strong></em> <code>trim</code><em></strong>метод.</em></p><p>ниже приведена матрица только для понимания поддерживаемых методов различными базами данных.</p><p>функция trim в sql используется для удаления указанного префикса или суффикса из строки. наиболее распространенный шаблон, который удаляется - это пробелы. эта функция вызывается по-разному в разных базах данных:</p><ul> <li><strong> mysql: </strong><code>trim(), rtrim(), ltrim()</code></li> <li><strong> oracle: </strong><code>rtrim(), ltrim()</code></li> <li><strong> sql server: </strong><code>rtrim(), ltrim()</code></li> </ul><p><strong> <em>как проверить пустой/ноль: -</em> </strong> </p><blockquote> <p>ниже приведены два разных способа в зависимости от разных баз данных.</p> </blockquote><p>синтаксис для этих функций обрезки:</p><ol> <li><p><strong> использование trim для проверки - </strong> </p> <p><code>select firstname from userdetails where trim(lastname) is null</code></p></li> <li><p><strong> использование ltrim & rtrim для проверки - </strong> </p> <p><code>select firstname from userdetails where ltrim(rtrim(lastname)) is null</code></p></li> </ol><p><em>выше обоих способов дают один и тот же результат, используйте только на основе вашей базы данных. он просто возвращает <code>firstname</code> из таблицы <code>userdetails</code>, если у него есть пустая <code>lastname</code></em></p><p><strong> надеюсь, это поможет вам :) </strong></p>

<p>если вы хотите, чтобы значения null были представлены последними при выполнении order by, попробуйте следующее:</p><pre><code>select * from my\_table where nullif(some\_col, '') is null; </code></pre>

<p>это утверждение намного понятнее и понятнее для меня:</p><pre><code>select * from my\_table where isnull(nullif(some\_col, '')); </code></pre>

<p>вы также можете сделать </p><pre><code>select * from table where column\_name like '' </code></pre><p>обратное существо</p><pre><code>select * from table where column\_name not like '' </code></pre>

<p>проверить на ноль</p><pre><code>$column is null isnull($column) </code></pre><p>проверить на пустое</p><pre><code>$column != "" </code></pre><p>тем не менее, вы всегда должны установить not null для столбца,<br> <a href="http://dev.mysql.com/doc/refman/5.0/en/is-null-optimization.html">оптимизация mysql может обрабатывать только один уровень is null</a> </p>

<p>в моем случае, пространство было введено в столбец во время импорта данных, и, хотя он выглядел как пустой столбец, его длина была равна 1. итак, сначала я проверил длину пустого столбца, используя <code>length(column)</code>, затем на основе этого мы можем написать поиск запрос</p><blockquote> <p>select * from table where lenght (column) = длина столбца для пустого колонка</p> </blockquote>

<pre><code>select * from table where length(rtrim(ltrim(column\_name))) > 0 </code></pre>

<pre><code>select * from tbl where trim(ifnull(col,'')) <> ''; </code></pre>