Как проверить нулевые / пустые / пробельные значения с помощью одного теста? - PullRequest
70 голосов
/ 05 ноября 2010

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

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

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

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

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

OR column_name IS NULL

и это будет работать, но я бы хотел, чтобы использовался один тест.

Ответы [ 9 ]

81 голосов
/ 05 ноября 2010

Функционально вы должны иметь возможность использовать

SELECT column_name
  FROM table_name
 WHERE TRIM(column_name) IS NULL

Проблема в том, что индекс COLUMN_NAME не будет использоваться.Вам нужно иметь индекс на основе функции для TRIM (имя_ столбца), если это выборочное условие.

16 голосов
/ 05 ноября 2010
SELECT column_name from table_name
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''

ISNULL(column_name, '') вернет '', если column_name имеет значение NULL, в противном случае он вернет column_name.

UPDATE

В Oracle вы можете использовать NVL для достижения тех же результатов.

SELECT column_name from table_name
WHERE RTRIM(NVL(column_name, '')) LIKE ''
5 голосов
/ 24 октября 2016

Проверяя значение null or Empty для столбца, я заметил, что существуют некоторые проблемы с поддержкой в ​​различных базах данных.

Каждая база данных не поддерживает TRIM метод.

Ниже приведена матрица для понимания поддерживаемых методов различными базами данных.

Функция TRIM в SQL используется для удаления указанного префикса или суффикса изстрока.Самым распространенным шаблоном, который удаляют, являются пробелы.Эта функция вызывается по-разному в разных базах данных:

  • MySQL: TRIM(), RTRIM(), LTRIM()
  • Oracle: RTRIM(), LTRIM()
  • SQL Server: TRIM(), RTRIM(), LTRIM()

Как проверить пустое / пустое / пустое пространство: -

Ниже приведены два разных способа в зависимости от разных баз данных-

Синтаксис этих функций обрезки:

  1. Использование Trim дляcheck-

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  2. Использование LTRIM & RTRIM для проверки-

    SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL

Вышеупомянутые оба способа дают один и тот же результат, просто используйте его на основе вашей базы данных.Он просто возвращает FirstName из UserDetails таблицы, если у него есть пустое LastName

Надеюсь, это поможет и другим:)

4 голосов
/ 05 февраля 2016

Функция NULLIF преобразует любое значение столбца только с пробелами в значение NULL.Работает для T-SQL и SQL Server 2008 и более поздних версий.

SELECT [column_name]
FROM [table_name]
WHERE NULLIF([column_name], '') IS NULL
2 голосов
/ 02 августа 2017

Этот запрос phpMyAdmin возвращает те строки, которые НЕ являются нулевыми или пустыми или содержат только пробелы:

SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))

если вы хотите выбрать строки, которые являются пустыми / пустыми / пустыми, просто удалите NOT.

1 голос
/ 23 августа 2018

Используйте запрос ниже, и он работает

SELECT column_name FROM table_name where isnull(column_name,'') <> ''
0 голосов
/ 20 августа 2015

вы можете использовать

SELECT [column_name] 
FROM [table_name]
WHERE [column_name] LIKE '% %' 
OR [column_name] IS NULL
0 голосов
/ 24 февраля 2015

Что я использую для IsNotNullOrEmptyOrWhiteSpace в T-SQL:

SELECT [column_name] FROM [table_name]
WHERE LEN(RTRIM(ISNULL([column_name], ''))) > 0
0 голосов
/ 23 января 2015

Так как в Oracle вы можете использовать функцию NVL в MySQL, вы можете использовать IFNULL (columnaName, newValue) для достижения желаемого результата, как в этом примере

SELECT column_name from table_name WHERE IFNULL(column_name,'') NOT LIKE '%_%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...