Ответ 1
Попробуйте это
COALESCE(NULLIF(Address.COUNTRY,''), 'United States')
У меня есть столбец, который может иметь значения 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
, но я надеюсь, что есть гораздо более элегантное/эффективное решение.
Вам придется доверять мне, когда я говорю, что искал решение моей конкретной проблемы и не нашел ответа. Если я что-то пропустил, любезно покажите мне освещенный путь.
Попробуйте это
COALESCE(NULLIF(Address.COUNTRY,''), 'United States')
Похоже, вы хотите видеть вместо изменения фактических данных таблицы.
Coalesce(NullIf(rtrim(Address.Country),''),'United States')
Это приведет к тому, что ваш столбец будет пустым, если на самом деле это пустая строка (или пустая строка), а с коалесценцией будет работать нуль.
Альтернативный способ может быть следующим: - рекомендуется использовать только одно выражение -
case when address.country <> '' then address.country
else 'United States'
end as country
Примечание. Результат проверки
null
оператором<>
вернетfalse
.
И как задокументировано:NULLIF
эквивалентно найденному выражениюCASE
иCOALESCE
выражение является синтаксическим ярлыком для выраженияCASE
.
Таким образом, комбинация из них использует два раза выраженияCASE
.
Для примера данных в вашей таблице, таких как комбинации
''
, 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