Как проверить, является ли столбец пустым или пустым в MySQL?
288
У меня есть столбец в таблице, который может содержать нулевые или пустые значения. Как проверить, является ли столбец пустым или пустым в строках, присутствующих в таблице?
Если вы измените условие на WHERE some_col IS NULL OR some_col = ' '(один пробел вставлен в строку), то оно будет работать как на MySQL, так и на Oracle, см. Ответ «onedaywhen». some_col = ''не работает в Oracle, так как пустые строки означают NULL там.
Йоханна
1
@Johanna, но если вы переключитесь на ' ', то это не будет работать в SQLite. Он обрабатывает только идентичные / прямые совпадения строк.
Магне
131
Как определено стандартом SQL-92, при сравнении двух строк разной ширины более узкое значение заполняется справа пробелами, чтобы сделать его такой же ширины, как и более широкое значение. Следовательно, все строковые значения, которые состоят исключительно из пробелов (включая пробелы в нуле), будут считаться равными, например
Спасибо за упоминание проложенных мест. Вы можете извлечь из них прибыль и изменить условие на 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, насколько я могу судить, из тестирования сейчас.
Магне
66
Более короткий способ написать условие:
WHERE some_col >''
Так как null > ''производит unknown, это имеет эффект фильтрации nullи пустой строки.
Есть ли способ получить обратное, получить все записи с нулевым значением или пустой строкой?
Джошуа Пинтер
14
@JoshPinter:coalesce(some_col, '') = ''
Andomar
6
Возможно, это когда-то было правдой, но не работает в MySQL 14.14.
Гуннар Тор Магнуссон
прекрасно работает и фактически является единственным способом, которым я мог бы выяснить, как отфильтровать как пустые, так и пустые поля в MariaDB
Нил Дэвис,
1
Я использую some_col <> '', чтобы найти обратную сторону этого
Chargnn
18
Вы можете проверить, является ли столбец пустым или нет, используя WHERE col IS NULLили, WHERE col IS NOT NULLнапример,
SELECT myCol
FROM MyTable
WHERE MyCol ISNULL
В вашем примере у вас есть различные перестановки пустого пространства. Вы можете удалить пустое пространство, используя TRIMи вы можете использоватьCOALESCE по умолчанию значения NULL (COALESCE возвращает первое значение ненулевого из значений вы шах.
например
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol,'')=''
Этот последний запрос будет возвращать строки, где MyCol нулевым значением или любой длиной пробела.
Если вы можете избежать этого, лучше не использовать функцию в столбце в предложении WHERE, поскольку это затрудняет использование индекса. Если вы просто хотите проверить, является ли столбец пустым или пустым, лучше сделать это:
SELECT myCol
FROM MyTable
WHERE MyCol ISNULLOR MyCol =''
Смотрите TRIM COALESCE и NULL для получения дополнительной информации.
Вы представляете реальное решение в очень запутанном виде. Сначала вы даете неполное решение его проблемы "где mycol равен нулю". Затем вы представляете решение, используя две вложенные функции в предложении where, даже при том, что этого следует избегать. Только тогда вы получите настоящее решение. В будущем сначала представьте свое реальное решение.
это возвращает 1, если есть что-то ноль, почему это так?
noobie-php
NULLIF проверяет имя поля на пустое значение и преобразуется в NULL, если оно было пустым. ISNULL возвращает 1 (true), если NULLIF успешно изменил пустое поле на NULL или если оно уже было NULL .... попробуйте самостоятельно в пустом и пустом поле в таблице с двумя разделенными функциями выбрать isnull (X) выберите nullif (y)
PodTech.io
9
Либо
SELECTIF(field1 ISNULLor field1 ='','empty', field1)as field1 from tablename
или
SELECTcasewhen field1 ISNULLor field1 =''then'empty'else field1
endas field1 from tablename
Я ненавижу грязные поля в моих базах данных. Если столбец может быть пустой строкой или пустым, я бы лучше исправил это перед каждым выбором select, например так:
UPDATE MyTable SET MyColumn=NULLWHERE MyColumn='';SELECT*FROM MyTable WHERE MyColumn ISNULL
Это обеспечивает чистоту данных, если по какой-то причине вам не нужно специально различать NULL и пусто.
Проверяя 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
Никогда не принимать NULLценности - это еще одна тема для обсуждения. Я не думаю, что было бы целесообразно давать эту рекомендацию без объяснения причин.
Мачек
Я включил, будь терпеливым. Плюс это действительно усложняет жизнь, используя NULL (как этот вопрос).
ajreal
5
Это ужасная рекомендация. Установка NOT NULL для столбца, значение которого может быть неизвестно во время INSERT, служит только для поощрения использования нестандартных «нулевых» значений, таких как -1и ''.
Дэн Бешард
@ Дан, если вы не уверены, каково значение во время вставки, у вас могут возникнуть трудности с проведением любой возможной оптимизации
Какой смысл в использовании как RTRIMи LTRIM, но не TRIM?
Нико Хаасе
0
В моем случае во время импорта данных в столбец было введено пространство, и хотя он выглядел как пустой столбец, его длина была равна 1. Поэтому сначала я проверил длину пустого столбца, используя length(column)затем, основываясь на этом, мы можем написать поисковый запрос.
SELECT * FROM TABLE WHERE LENGHT (COLUMN) = длина столбца для пустого столбца
select isnull(mycolumn) from mytable
возвращает 1, если mycolumn равен нулю.Ответы:
Это выберет все строки, где
some_col
естьNULL
или''
(пустая строка)источник
WHERE some_col IS NULL OR some_col = ' '
(один пробел вставлен в строку), то оно будет работать как на MySQL, так и на Oracle, см. Ответ «onedaywhen».some_col = ''
не работает в Oracle, так как пустые строки означают NULL там.' '
, то это не будет работать в SQLite. Он обрабатывает только идентичные / прямые совпадения строк.Как определено стандартом SQL-92, при сравнении двух строк разной ширины более узкое значение заполняется справа пробелами, чтобы сделать его такой же ширины, как и более широкое значение. Следовательно, все строковые значения, которые состоят исключительно из пробелов (включая пробелы в нуле), будут считаться равными, например
Следовательно, это должно работать независимо от того, сколько пробелов составляют
some_col
значение:или более кратко:
источник
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, насколько я могу судить, из тестирования сейчас.Более короткий способ написать условие:
Так как
null > ''
производитunknown
, это имеет эффект фильтрацииnull
и пустой строки.источник
coalesce(some_col, '') = ''
Вы можете проверить, является ли столбец пустым или нет, используя
WHERE col IS NULL
или,WHERE col IS NOT NULL
например,В вашем примере у вас есть различные перестановки пустого пространства. Вы можете удалить пустое пространство, используя
TRIM
и вы можете использоватьCOALESCE
по умолчанию значения NULL (COALESCE возвращает первое значение ненулевого из значений вы шах.например
Этот последний запрос будет возвращать строки, где
MyCol
нулевым значением или любой длиной пробела.Если вы можете избежать этого, лучше не использовать функцию в столбце в предложении WHERE, поскольку это затрудняет использование индекса. Если вы просто хотите проверить, является ли столбец пустым или пустым, лучше сделать это:
Смотрите TRIM COALESCE и NULL для получения дополнительной информации.
Также Работа с нулевыми значениями из документов MySQL
источник
)
=
Другой метод без ГДЕ, попробуйте это ..
Выберет как пустые, так и пустые значения
источник
Либо
или
источник
Я ненавижу грязные поля в моих базах данных. Если столбец может быть пустой строкой или пустым, я бы лучше исправил это перед каждым выбором select, например так:
Это обеспечивает чистоту данных, если по какой-то причине вам не нужно специально различать 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
Надеюсь, это поможет вам :)
источник
Если вы хотите, чтобы значения NULL были представлены последними при выполнении ORDER BY, попробуйте следующее:
источник
Вы также можете сделать
Обратное существо
источник
select NULL like ''
возвращаетNULL
- по крайней мере, в MySQL.источник
col1 != IFNULL(col2,'')
Проверить на ноль
Проверить на пустое
Тем не менее, вы всегда должны установить NOT NULL для столбца,
оптимизация mysql может обрабатывать только один уровень IS NULL
источник
NULL
ценности - это еще одна тема для обсуждения. Я не думаю, что было бы целесообразно давать эту рекомендацию без объяснения причин.-1
и''
.источник
RTRIM
иLTRIM
, но неTRIM
?В моем случае во время импорта данных в столбец было введено пространство, и хотя он выглядел как пустой столбец, его длина была равна 1. Поэтому сначала я проверил длину пустого столбца, используя
length(column)
затем, основываясь на этом, мы можем написать поисковый запрос.источник
попробуйте это, если тип данных - строка, а строка - ноль
если тип данных int или столбец 0, попробуйте это
источник
источник
NULL
.