У меня есть столбец в таблице, который может содержать нулевые или пустые значения. Как проверить, является ли столбец пустым или пустым в строках, присутствующих в таблице?
(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 = '';
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. Надеюсь, это будет полезно.
'' = ' '
работает в SQLServer, но не в SQLite, насколько я могу судить, из тестирования сейчас.
Более короткий способ написать условие:
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 возвращает первое значение ненулевого из значений вы шах.
например
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = ''
Этот последний запрос будет возвращать строки, где MyCol
нулевым значением или любой длиной пробела.
Если вы можете избежать этого, лучше не использовать функцию в столбце в предложении WHERE, поскольку это затрудняет использование индекса. Если вы просто хотите проверить, является ли столбец пустым или пустым, лучше сделать это:
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
Смотрите TRIM COALESCE и NULL для получения дополнительной информации.
Также Работа с нулевыми значениями из документов MySQL
)
=
Другой метод без ГДЕ, попробуйте это ..
Выберет как пустые, так и пустые значения
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
Либо
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
Я ненавижу грязные поля в моих базах данных. Если столбец может быть пустой строкой или пустым, я бы лучше исправил это перед каждым выбором select, например так:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Это обеспечивает чистоту данных, если по какой-то причине вам не нужно специально различать NULL и пусто.
Проверяя 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 tbl WHERE trim(IFNULL(col,'')) <> '';
col1 != IFNULL(col2,'')
Проверить на ноль
$column is null
isnull($column)
Проверить на пустое
$column != ""
Тем не менее, вы всегда должны установить NOT NULL для столбца,
оптимизация mysql может обрабатывать только один уровень IS NULL
NULL
ценности - это еще одна тема для обсуждения. Я не думаю, что было бы целесообразно давать эту рекомендацию без объяснения причин.
-1
и ''
.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
и LTRIM
, но не TRIM
?
В моем случае во время импорта данных в столбец было введено пространство, и хотя он выглядел как пустой столбец, его длина была равна 1. Поэтому сначала я проверил длину пустого столбца, используя length(column)
затем, основываясь на этом, мы можем написать поисковый запрос.
SELECT * FROM TABLE WHERE LENGHT (COLUMN) = длина столбца для пустого столбца
попробуйте это, если тип данных - строка, а строка - ноль
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''
если тип данных int или столбец 0, попробуйте это
SELECT * FROM table WHERE column_name > = 0
select isnull(mycolumn) from mytable
возвращает 1, если mycolumn равен нулю.