Запрос SQL Server для проверки пустой строки и замены чем-то другим

У меня есть проект типа интеграции, в котором мой выбранный столбец часто имеет этот код:

select 
CASE MyColumn
    WHEN '' THEN '&' 
    ELSE MyColumn
END

Есть ли более простой подход? Что-то вроде объединения с нулями? Я нахожу запрос очень трудным для чтения и т.д.

Спасибо


person Raymond    schedule 15.11.2013    source источник
comment
см. «принятый» ответ ниже. На самом деле мне не нужно было сохранять нулевое значение, и главная цель, в конце концов, состояла в том, чтобы упростить запрос, чтобы его было легче читать, не повторяя столько раз «MyColumn».   -  person Raymond    schedule 16.11.2013


Ответы (4)


Я думаю, вы можете попробовать что-то вроде этого...

 COALESCE(NULLIF(MyColumn,''), '&')
person M.Ali    schedule 15.11.2013
comment
Это функционально не эквивалентно... исходная реализация сохранила бы значение NULL, это заменяет NULL на '&'. - person Michael Fredrickson; 16.11.2013
comment
хорошо подмечено, опс @Vishal и я ответили точно так же :) - person M.Ali; 16.11.2013
comment
Я предполагаю, что в этом случае оператор CASE должен выполнить эту работу. - person M.Ali; 16.11.2013
comment
Спасибо - на самом деле мне не нужно было сохранять NULL, но если бы я это сделал, один из других ответов помог бы... хотя помните, первоначальной целью было упростить выбор по сравнению со случаем, когда структура, и я не уверен, что любой из других ответов упрощает его. Этот делает. - person Raymond; 16.11.2013
comment
хорошо, я рад, что это помогло :) - person M.Ali; 16.11.2013

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

COALESCE(NULLIF(MyColumn,''), '&')
person Vishal    schedule 15.11.2013
comment
Это функционально не эквивалентно... исходная реализация сохранила бы значение NULL, это заменяет NULL на '&'. - person Michael Fredrickson; 16.11.2013
comment
Это правда, тогда не вижу выхода. - person Vishal; 16.11.2013

В продолжение комментария @Michael Fredrickson

NULLIF(COALESCE(NULLIF(COALESCE(MyColumn,'###'),''), '&'),'###')

Замените ### любым значением, которое, как вы знаете, не будет отображаться в поле. Не уверен, что его легче читать, чем оператор case.

person conan    schedule 15.11.2013

Это должно работать и сохранять нули:

SELECT COALESCE(NULLIF(MyColumn, ''), NULLIF(MyColumn + '&', ''), MyColumn)
person d89761    schedule 15.11.2013