it-swarm.com.ru

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

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

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

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

SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
357
maček

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

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

WHERE some_col > ''

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

53
Andomar

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

SELECT myCol 
FROM MyTable 
WHERE MyCol IS NULL 

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

например 

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

Этот последний запрос будет возвращать строки, где MyCol равен нулю или является любой длиной пробела.

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

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

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

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

12
Code Magician

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

Выберет как пустые, так и пустые значения 

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename
9
PodTech.io

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

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

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

5
Keith Johnson

пытаться

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

-> 0, 0, 1

или же

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

Ссылка

4
diEcho

Или 

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
4
Reynante Daitol

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

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

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

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

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

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

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

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

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

    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

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

3
Vikash Pandey

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

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

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

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

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

SELECT * FROM table WHERE column_name LIKE ''

Обратное существо

SELECT * FROM table WHERE column_name NOT LIKE ''
2
brenjt

Проверить на ноль

$column is null
isnull($column)

Проверить на пустое

$column != ""

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

1
ajreal

В моем случае, пространство было введено в столбец во время импорта данных, и, хотя он выглядел как пустой столбец, его длина была равна 1. Итак, сначала я проверил длину пустого столбца, используя length(column), затем на основе этого мы можем написать поиск запрос

SELECT * FROM TABLE WHERE LENGHT (COLUMN) = длина столбца для пустого колонка

0
MR AND
select * from table where length(RTRIM(LTRIM(column_name))) > 0
0
Hakan Ilgar
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
0
Baltazar Moreno