Замена NULL и пустой строки внутри оператора Select

У меня есть столбец, который может иметь значения NULL или пустого пространства (т.е. ''). Я хотел бы заменить оба этих значения на допустимое значение, например 'UNKNOWN'. Различные решения, которые я нашел, предлагают изменить значение в самой таблице. Однако в этом случае это не вариант, поскольку база данных предназначена для стороннего приложения, которое разработано и/или исправлено очень плохо (на самом деле, я думаю, что мой Ротвейлер мог бы улучшить работу). Я обеспокоен тем, что изменение базовых данных может заставить приложение расплавиться в дымящееся отверстие.

Я попытался изменить следующие команды:

COALESCE(Address.COUNTRY, 'United States') -- Won't replace empty string as it is not NULL
REPLACE(Address.COUNTRY, '', 'United States') -- Doesn't replace empty string
ISNULL(Address.COUNTRY, 'United States') -- Works for NULL but not empty string

Я знаю, что могу использовать оператор CASE, но я надеюсь, что есть гораздо более элегантное/эффективное решение.

Вам придется доверять мне, когда я говорю, что искал решение моей конкретной проблемы и не нашел ответа. Если я что-то пропустил, любезно покажите мне освещенный путь.

Ответ 1

Попробуйте это

COALESCE(NULLIF(Address.COUNTRY,''), 'United States')

Ответ 2

Похоже, вы хотите видеть вместо изменения фактических данных таблицы.

Coalesce(NullIf(rtrim(Address.Country),''),'United States')

Это приведет к тому, что ваш столбец будет пустым, если на самом деле это пустая строка (или пустая строка), а с коалесценцией будет работать нуль.

Ответ 3

Альтернативный способ может быть следующим: - рекомендуется использовать только одно выражение -

case when address.country <> '' then address.country
else 'United States'
end as country

Примечание. Результат проверки null оператором <> вернет false.
И как задокументировано: NULLIF эквивалентно найденному выражению CASE
и COALESCE выражение является синтаксическим ярлыком для выражения CASE.
Таким образом, комбинация из них использует два раза выражения CASE.

Ответ 4

Для примера данных в вашей таблице, таких как комбинации

'', null, а также actual value, чем если вы хотите только actual value и заменить на '' и значение null на символ #, чем выполнить этот запрос

SELECT Column_Name = (CASE WHEN (Column_Name IS NULL OR Column_Name = '') THEN '#' ELSE Column_Name END) FROM Table_Name

и другой способ его использования, но он немного длинен, и вместо этого вы также можете использовать функцию IsNull, но здесь я упоминаю только функцию IIF

SELECT IIF(Column_Name IS NULL, '#', Column_Name) FROM Table_Name  
SELECT IIF(Column_Name  = '', '#', Column_Name) FROM Table_Name  
-- and syntax of this query
SELECT IIF(Column_Name IS NULL, 'True Value', 'False Value') FROM Table_Name