У меня есть столбец в таблице, который может содержать нулевые или пустые значения. Как проверить, является ли столбец пустой или нулевой в строках, присутствующих в таблице.
(e.g. null or '' or ' ' or ' ' and ...)
Это выберет все строки, в которых some_col
есть NULL
или ''
(пустая строка)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
WHERE some_col IS NULL OR some_col = ' '
(один пробел вставлен в строку), то оно будет работать как на MySQL, так и на Oracle, см. Ответ "onedaywhen". some_col = ''
не работает в Oracle, поскольку пустые строки означают NULL.
' '
, то в SQLite это не сработает. Он обрабатывает только идентичные / прямые совпадения строк.
Как определено стандартом 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 IS NULL OR some_col = ' '
(один пробел вставлен в строку), тогда оно работает как на MySQL, так и на Oracle. some_col = ''
не работает в Oracle, так как пустые строки означают NULL там, и полное условие становится NULL.
SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
и SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
работал для меня в MySQL. Надеюсь, это будет полезно.
Более короткий способ записать условие:
WHERE some_col > ''
Так как null > ''
создает unknown
, это приводит к фильтрации как null
, так и пустых строк.
coalesce(some_col, '') = ''
Вы можете проверить, является ли столбец нулевым или не является нулевым, используя 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
Либо
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 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 * FROM table WHERE column_name LIKE ''
Обратное бытие
SELECT * FROM table WHERE column_name NOT LIKE ''
select NULL like ''
возвращает NULL
- по крайней мере, в MySQL.
Это утверждение намного чище и читаемо для меня:
select * from my_table where ISNULL(NULLIF(some_col, ''));
Если вы хотите иметь значения NULL, представленные последними при выполнении ORDER BY, попробуйте следующее:
SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;
Проверить значение null
$column is null
isnull($column)
Проверить пустые
$column != ""
Однако вы всегда должны указывать NOT NULL для столбца,
Оптимизация mysql может обрабатывать только один уровень NULL по умолчанию
NULL
- это еще одна тема для обсуждения. Я не думаю, что было бы целесообразно давать эту рекомендацию без объяснения причин.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
и LTRIM
, но не TRIM
?
попробуйте это, если тип данных - строка, а строка - 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, '')
NULL
.
select isnull(mycolumn) from mytable
возвращает 1, если mycolumn равно нулю.