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