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

У меня есть столбец в таблице, которая может содержать нулевые или пустые значения. Как проверить, является ли столбец пустым или нулевым в строках, присутствующих в таблице.

(e.g. null or '' or '  ' or '      ' and ...)

15 ответов


Это позволит выбрать все строки, где some_col is NULL или '' (пустая строка)

SELECT * FROM table WHERE some_col IS NULL OR some_col = '';

как определено стандартом SQL-92, при сравнении двух строк разной ширины более узкое значение заполняется пробелами, чтобы оно было такой же ширины, как и более широкое значение. Поэтому все строковые значения, состоящие полностью из пробелов (включая нулевые пробелы), будут считаться равными, например

'' = ' ' IS TRUE
'' = '  ' IS TRUE
' ' = '  ' IS TRUE
'  ' = '      ' IS TRUE
etc

поэтому это должно работать независимо от того, сколько пробелов составляют some_col значение:

SELECT * 
  FROM T
 WHERE some_col IS NULL 
       OR some_col = ' ';

или более лаконично:

SELECT * 
  FROM T
 WHERE NULLIF(some_col, ' ') IS NULL;

более короткий способ написать условие:

WHERE some_col > ''

С null > '' производит unknown, это имеет эффект фильтрации как null и пустые строки.


вы можете проверить, является ли столбец нулевым или не нулевым, используя WHERE col IS NULL или WHERE col IS NOT NULL например

SELECT myCol 
FROM MyTable 
WHERE MyCol IS NULL 

в вашем примере у вас есть различные варианты белого пространства. Вы можете удалить пробел, используя TRIM и вы можете использовать COALESCE по умолчанию значение NULL (COALESCE вернет первое ненулевое значение из значений, которые вы suppy.

например

SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = '' 

этот последний запрос вернет строки, где MyCol равно null или имеет любую длину пробел.

если вы можете избежать этого, лучше не иметь функции в столбце в предложении WHERE, поскольку это затрудняет использование индекса. Если вы просто хотите проверить, является ли столбец нулевым или пустым, вам может быть лучше сделать это:

SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol =  '' 

посмотреть отделка объединиться и РАВНО NULL для получения дополнительной информации.

и работа со значениями null из документов MySQL


другой метод без WHERE, попробуйте это..

будет выбирать как пустые, так и нулевые значения

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename

попробовать

SELECT 0 IS NULL ,  '' IS NULL , NULL IS NULL

-> 0, 0, 1

или

SELECT ISNULL('  ') , ISNULL( NULL )
 -> 0 ,1

ссылка


Я ненавижу грязные поля в моих базах данных. Если столбец может быть пустой строкой или null, я бы предпочел исправить это, прежде чем делать выбор каждый раз, например:

UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL

это сохраняет данные в порядке, если вам по какой-то причине не нужно различать NULL и empty.


при проверке null or Empty значение для столбца в моем проекте, я заметил, что есть некоторые проблемы поддержки в различных базах данных.

каждая база данных не поддерживает TRIM метод.

ниже приведена матрица, чтобы понять поддерживаемые методы различными базами данных.

функция TRIM в SQL используется для удаления указанного префикса или суффикса из строки. Наиболее распространенный шаблон удаляются пробелы. Эта функция вызывается по-разному в разных базах данных:

  • MySQL: TRIM(), RTRIM(), LTRIM()
  • Oracle: RTRIM(), LTRIM()
  • SQL Server: RTRIM(), LTRIM()

Как проверить пустой / Null : -

ниже приведены два разных способа в соответствии с различными базами данных -

синтаксис эти функции отделки являются следующими:

  1. использование обрезки для проверки -

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  2. использование LTRIM & RTRIM для проверки -

    SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL

над обоими путями обеспечьте такой же результат как раз пользу основанную на вашей поддержке базы данных. Он просто возвращает FirstName С UserDetails таблица, если она имеет пустой LastName

надеясь это вам поможет:)


или

SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename

или

SELECT case when field1 IS NULL or field1 = ''
        then 'empty'
        else field1
   end as field1 from tablename

Если вы хотите иметь значения NULL, представленные последними при выполнении заказа, попробуйте следующее:

SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;

Это утверждение намного чище и более читабельным для меня:

select * from my_table where ISNULL(NULLIF(some_col, ''));

вы также можете сделать

SELECT * FROM table WHERE column_name LIKE ''

обратная будучи

SELECT * FROM table WHERE column_name NOT LIKE ''

проверить на null

$column is null
isnull($column)

проверка на пустое значение

$column != ""

однако вы всегда должны устанавливать NOT NULL для столбца,
оптимизация mysql может обрабатывать только один нулевой уровень


попробуйте это, если тип данных-строка, а строка-null

SELECT * FROM table WHERE column_name IS NULL OR column_name = ''

Если тип данных int или столбец 0, попробуйте это

SELECT * FROM table WHERE column_name > = 0

SELECT column_name FROM table_name WHERE column_name IN (NULL, '')