У меня есть столбец в таблице, который может содержать нулевые или пустые значения. Как проверить, является ли столбец пустой или нулевой в строках, присутствующих в таблице.
(e.g. null or '' or ' ' or ' ' and ...)
У меня есть столбец в таблице, который может содержать нулевые или пустые значения. Как проверить, является ли столбец пустой или нулевой в строках, присутствующих в таблице.
(e.g. null or '' or ' ' or ' ' and ...)
Это выберет все строки, в которых some_col
есть 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 = ''
См. TRIM COALESCE и IS NULL для получения дополнительной информации.
Также Работа с нулевыми значениями из документов MySQL
Другой метод без WHERE, попробуйте это.
Выберет значения Empty и NULL
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
Я ненавижу грязные поля в своих базах данных. Если столбец может быть пустой или нулевой, я бы лучше исправить это, прежде чем делать выбор каждый раз, например:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Это сохраняет данные в порядке, пока вам не нужно явно различать NULL и empty по какой-либо причине.
попробовать
SELECT 0 IS NULL , '' IS NULL , NULL IS NULL
-> 0, 0, 1
или
SELECT ISNULL(' ') , ISNULL( NULL )
-> 0 ,1
Проверяя значение null or Empty
для столбца в моем проекте, я заметил, что в различных Базах данных есть некоторые проблемы поддержки.
Каждая база данных не поддерживает метод TRIM
.
Ниже приведена матрица только для понимания поддерживаемых методов различными базами данных.
Функция TRIM в SQL используется для удаления указанного префикса или суффикса из строки. Наиболее распространенный шаблон, который удаляется, - это пробелы. Эта функция вызывается по-разному в разных базах данных:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
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
Надеюсь, это поможет вам:)
Либо
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, представленные последними при выполнении ORDER BY, попробуйте следующее:
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 length(RTRIM(LTRIM(column_name))) > 0
попробуйте это, если тип данных - строка, а строка - 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, '')