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

230

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

(e.g. null or '' or '  ' or '      ' and ...)
  • 1
    Код MySQL: select isnull(mycolumn) from mytable возвращает 1, если mycolumn равно нулю.
  • 1
    как насчет длины (trim (mycolumn))> 0?
Показать ещё 1 комментарий
Теги:

16 ответов

349
Лучший ответ

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

SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
  • 5
    Если вы измените условие на WHERE some_col IS NULL OR some_col = ' ' (один пробел вставлен в строку), то оно будет работать как на MySQL, так и на Oracle, см. Ответ "onedaywhen". some_col = '' не работает в Oracle, поскольку пустые строки означают NULL.
  • 1
    @Johanna, но если вы переключитесь на ' ' , то в SQLite это не сработает. Он обрабатывает только идентичные / прямые совпадения строк.
129

Как определено стандартом 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;
  • 6
    Спасибо за упоминание проложенных мест. Вы можете извлечь из них прибыль и изменить условие на WHERE some_col IS NULL OR some_col = ' ' (один пробел вставлен в строку), тогда оно работает как на MySQL, так и на Oracle. some_col = '' не работает в Oracle, так как пустые строки означают NULL там, и полное условие становится NULL.
  • 0
    Моим требованием было найти SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' '; и SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL; работал для меня в MySQL. Надеюсь, это будет полезно.
Показать ещё 1 комментарий
51

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

WHERE some_col > ''

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

  • 2
    Есть ли способ получить обратное, получить все записи с нулевым значением или пустой строкой?
  • 10
    @JoshPinter: coalesce(some_col, '') = ''
Показать ещё 3 комментария
12

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

  • 2
    Вы представляете настоящее решение в очень запутанном виде. Сначала вы даете неполное решение его проблемы "где mycol равен нулю". Затем вы представляете решение, используя две вложенные функции в предложении where, даже при том, что этого следует избегать. Только тогда вы получите настоящее решение. В будущем сначала представьте свое реальное решение.
9

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

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

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename
  • 0
    это возвращает 1, если есть что-то ноль, почему это так?
  • 0
    NULLIF проверяет имя поля на пустое значение и преобразуется в NULL, если оно было пустым. ISNULL возвращает 1 (true), если NULLIF успешно изменил пустое поле на NULL или если оно уже было NULL .... попробуйте самостоятельно в пустом и пустом поле в таблице с двумя разделенными функциями выбрать isnull (X) выберите nullif (y)
5

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

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

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

4

попробовать

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

-> 0, 0, 1

или

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

Ссылка

3

Либо

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
3

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

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

2

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

SELECT * FROM table WHERE column_name LIKE ''

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

SELECT * FROM table WHERE column_name NOT LIKE ''
  • 0
    Очевидно, не работает: select NULL like '' возвращает NULL - по крайней мере, в MySQL.
2

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

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

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

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

Проверить значение null

$column is null
isnull($column)

Проверить пустые

$column != ""

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

  • 3
    Никогда не принимать значения NULL - это еще одна тема для обсуждения. Я не думаю, что было бы целесообразно давать эту рекомендацию без объяснения причин.
  • 0
    Я включил, будь терпеливым. Плюс это действительно усложняет жизнь, используя NULL (как этот вопрос).
Показать ещё 2 комментария
0
select * from table where length(RTRIM(LTRIM(column_name))) > 0
  • 1
    Какой смысл использовать RTRIM и LTRIM , но не TRIM ?
0

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

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

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

SELECT * FROM table WHERE column_name > = 0
-3
SELECT column_name FROM table_name WHERE column_name IN (NULL, '')
  • 1
    Неправильный ответ. Это не выберет NULL .
  • 0
    @Pang: Согласился, что принятый ответ правильный

Ещё вопросы

Сообщество Overcoder
Наверх
Меню