Как проверить, пустой ли столбец или null в mysql

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

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

Ответ 1

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

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

Ответ 2

Как определено стандартом 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;

Ответ 3

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

WHERE some_col > ''

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

Ответ 4

Вы можете проверить, является ли столбец нулевым или не является нулевым, используя 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 =  '' 

См. TRIM COALESCE и IS NULL для получения дополнительной информации.

Также Работа с нулевыми значениями из документов MySQL

Ответ 5

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

Выберет значения Empty и NULL

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

Ответ 6

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

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

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

Ответ 7

попробовать

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

-> 0, 0, 1

или

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

Ссылка

Ответ 8

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

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

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

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

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

Как проверить пустую/нулевую: -

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

Синтаксис этих функций обрезки:

  • Использование Trim для проверки -

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  • Использование LTRIM и RTRIM для проверки -

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

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

Надеюсь, это поможет вам:)

Ответ 9

Либо

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

Ответ 10

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

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

Ответ 11

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

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

Ответ 12

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

SELECT * FROM table WHERE column_name LIKE ''

Обратное бытие

SELECT * FROM table WHERE column_name NOT LIKE ''

Ответ 14

select * from table where length(RTRIM(LTRIM(column_name))) > 0

Ответ 15

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

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

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

SELECT * FROM table WHERE column_name > = 0

Ответ 16

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