Как проверить значения null/empty/whitespace с помощью одного теста?
Я бы хотел написать инструкцию SELECT, которая использует только один тест, чтобы возвращать столбцы без значения (нуль, пусто или все пробелы).
Я думал, что это сработает:
SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';
Но это не работает для значений NULL.
Конечно, я могу добавить
OR column_name IS NULL
и он будет работать, но мне нужен способ, который использует один тест.
Ответы
Ответ 1
Функционально вы должны иметь возможность использовать
SELECT column_name
FROM table_name
WHERE TRIM(column_name) IS NULL
Проблема в том, что индекс в COLUMN_NAME не будет использоваться. Вам нужно будет иметь индекс на основе функции TRIM (column_name), если это выборочное условие.
Ответ 2
SELECT column_name from table_name
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
ISNULL(column_name, '')
вернет '', если column_name NULL, в противном случае оно вернет имя_столбца.
ОБНОВЛЕНИЕ
В Oracle вы можете использовать NVL
для достижения тех же результатов.
SELECT column_name from table_name
WHERE RTRIM(NVL(column_name, '')) LIKE ''
Ответ 3
Проверяя значение null or Empty
для столбца, я заметил, что в различных Базах данных есть некоторые проблемы поддержки.
Каждая база данных не поддерживает метод TRIM
.
Ниже приведена матрица только для понимания поддерживаемых методов различными базами данных.
Функция TRIM в SQL используется для удаления указанного префикса или суффикса из строки. Наиболее распространенный шаблон, который удаляется, - это пробелы. Эта функция вызывается по-разному в разных базах данных:
- MySQL:
TRIM(), RTRIM(), LTRIM()
- Oracle:
RTRIM(), LTRIM()
- SQL Server:
TRIM(), 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
Надеясь, что это тоже поможет другим:)
Ответ 4
Функция NULLIF преобразует любое значение столбца только с пробелом в значение NULL. Работает для T-SQL и SQL Server 2008 и выше.
SELECT [column_name]
FROM [table_name]
WHERE NULLIF([column_name], '') IS NULL
Ответ 5
Этот запрос phpMyAdmin возвращает те строки, которые не являются ни пустыми, ни пустыми, ни просто пробелами:
SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))
если вы хотите выбрать строки, которые являются пустыми/пустыми/просто пробелами, просто удалите NOT.
Ответ 6
Используйте запрос ниже, и он работает
SELECT column_name FROM table_name where isnull(column_name,'') <> ''
Ответ 7
Каждое отдельное предложение о том, чтобы выполнить запрос в Oracle, чтобы найти записи, чье конкретное поле просто пустое (это не включает (ноль) или любое другое поле только пустая строка), не работало. Я попробовал каждый предложенный код. Думаю, я буду продолжать поиск в Интернете.
***** UPDATE *****
Я попробовал это, и это сработало, но я не уверен, почему это не сработает, если & lt; 1 но по какой-то причине & lt; 2 работали и возвращали только те записи, поле которых просто пусто
выберите [columnName] из [tableName], где LENGTH (columnName) & lt; 2;
Я предполагаю, что любой сценарий, который использовался для преобразования данных, оставлял что-то в поле, даже если он отображался пустым, так или иначе я догадываюсь, почему & lt; 2 работает, но не & lt; 1
Однако, если у вас есть какие-либо другие значения в этом столбце, длина которых меньше двух символов, вам может потребоваться другое решение. Если других персонажей немного, вы можете выделить их.
Надеюсь, что мое решение когда-нибудь поможет кому-то еще.
Ответ 8
То, что я использую для IsNotNullOrEmptyOrWhiteSpace
в T-SQL:
SELECT [column_name] FROM [table_name]
WHERE LEN(RTRIM(ISNULL([column_name], ''))) > 0
Ответ 9
Как и в Oracle, вы можете использовать функцию NVL в MySQL, вы можете использовать IFNULL (columnaName, newValue) для достижения желаемого результата, как в этом примере
SELECT column_name from table_name WHERE IFNULL(column_name,'') NOT LIKE '%_%';
Ответ 10
вы можете использовать
SELECT [column_name]
FROM [table_name]
WHERE [column_name] LIKE '% %'
OR [column_name] IS NULL