2014-04-10 3 views
0

В моем SQL я использую NULLIF(NULLIF(UPPER(T.Column),''),'NULL') в нескольких местах. Но проблема в том, что он обновляет T.Column до верхних шапок. Теперь я думаю использовать NULLIF(NULLIF(T.Column,''),'NULL'). Моя заявка на производство. Не уверен, что это может повлиять на мой запрос?Разница между NULLIF (NULLIF (UPPER (T.Column), ''), 'NULL') и NULLIF (NULLIF (T.Column, ''), 'NULL')?

+0

Что такое внешний 'ifnull' для? Кажется, излишним. –

+1

@juergend: Чтобы преобразовать строку «NULL» в значение «null». – Guffa

+0

@juergend, да короткая строка «Null» или пустая проверка – user960567

ответ

1

Если вы уверены, что все значения в поле в верхнем регистре, то вызов UPPER является сверхъестественным.

Обратите внимание, что значение должно быть в верхнем регистре, даже если оно содержит текст 'NULL', например. 'Null' или 'null' не будут преобразованы в null, если у вас нет кодировки с учетом регистра, установленной на поле.

+0

T.Column может быть NULL, NUll, NuLL и т. Д. – user960567

+0

моя сортировка - «Arabic_CI_AS» – user960567

+0

@ user960567: Тогда сравнение с 'NULL' будет работать без «ВЕРХНИЙ». – Guffa

1

Будет ли это влиять на ваш запрос ... ну, это зависит от того, где вы помещаете все инструкции NULLIF. Вы даете DB больше работы, чтобы делать в целом, но если этот столбец включен в инструкцию WHERE, это более чем вероятно предотвратит использование оптимизатором индекса в вашем столбце. Следовательно, это может негативно сказаться на производительности. Если его включить в предложение select, то это будет по-прежнему отрицательным, но гораздо меньшим.

Лично это выглядит немного грязно. Если вы используете его повсюду, подумайте о создании представления этой таблицы. В представлении создайте столбец, который имеет эту логику один раз. Затем ваш код может ссылаться на представление, не повторяя вышеуказанные функции. Ваш сохраненный код Proc будет намного чище везде, где беспорядок будет скрыт!

Смежные вопросы