Как я проверяю, является ли столбец пустым или нулевым в mysql - PullRequest
251 голосов
/ 12 декабря 2011

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

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

Ответы [ 18 ]

387 голосов
/ 12 декабря 2011

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

SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
124 голосов
/ 12 декабря 2011

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

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

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

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

или более кратко:

SELECT * 
  FROM T
 WHERE NULLIF(some_col, ' ') IS NULL;
56 голосов
/ 30 июня 2013

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

WHERE some_col > ''

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

12 голосов
/ 12 декабря 2011

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

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

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

9 голосов
/ 03 января 2016

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

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

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename
6 голосов
/ 07 июня 2017

Либо

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
5 голосов
/ 03 декабря 2014

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

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

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

5 голосов
/ 12 декабря 2011

1001 * попробовать *

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

-> 0, 0, 1

или

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

Ссылка

3 голосов
/ 21 октября 2016

Проверяя значение 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

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

2 голосов
/ 12 декабря 2011

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

SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...