Случай с выражением 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