У меня есть столбец в таблице, который может содержать нулевые или пустые значения. Как проверить, является ли столбец пустым или пустым в строках, присутствующих в таблице?
(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 равен нулю.