Подтвердить что ты не робот

Как проверить значения null/empty/whitespace с помощью одного теста?

Я бы хотел написать инструкцию SELECT, которая использует только один тест, чтобы возвращать столбцы без значения (нуль, пусто или все пробелы).

Я думал, что это сработает:

SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';

Но это не работает для значений NULL.

Конечно, я могу добавить

OR column_name IS NULL

и он будет работать, но мне нужен способ, который использует один тест.

4b9b3361

Ответ 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