Случай с выражением NULL в SQL Server

У меня проблема с этим фрагментом кода, и я уверен, что решение довольно простое, но я его не вижу.

CASE @L0 WHEN '/' THEN NULL ELSE @L0 END

Это часть кода, который я использую для импорта данных из плоского файла (CSV), где NULL хранится как /. Проблема в том, что @L0 также может быть входной переменной, заполненной другой программой, и возможно, что она может быть NULL. Из-за этого нельзя использовать значение NULL в качестве выражения в CASE, код не работает, и я получаю сообщение об ошибке.

Может кто-нибудь сказать мне, как сделать это правильно?

3 ответа

Решение

Если вы просто хотите заменить '/' с NULL и оставив все остальные строки без изменений, вы можете использовать NULLIF() функция например NULLIF(@Lo, '/')

Сопоставьте значение NULL с '/' или любой другой строкой:

 CASE COALESCE(@L0, '/') WHEN '/' THEN NULL ELSE @L0 END

 CASE COALESCE(@L0, 'other string') WHEN '/' THEN NULL ELSE COALESCE(@L0, 'other string') END

"Другая строка", конечно, никогда не должна появляться как обычное ненулевое содержимое @L0. В случае, если результат должен быть '/' для @ L0, являющегося 'другой строкой', возьмите это:

 CASE COALESCE(@L0, 'other string') WHEN '/' THEN NULL ELSE COALESCE(@L0, '/') END

Попробуйте следующее, которое по умолчанию @L0 в '/', если он нулевой:

CASE COALESCE(@L0, '/') WHEN '/' THEN NULL ELSE @L0 END
Другие вопросы по тегам