Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all articles
Browse latest Browse all 7251

Конкатенация строк - как лучше всего предусмотреть что одно из слагаемых может быть NULL?

$
0
0
Хочу добавить простейшую вычисляемую колонку.
Всё вычисление состоит в том, чтоб слепить через пробел значения из нескольких колонок этой же таблицы, а последнее в скобках.
ALTER TABLE test ADD user_title AS f4+' '+f2+' '+f7+' ('+comment+')';
С колонками f* проблем нет, они NOT NULL, так что доп.проверок не требуется. А вот колонка comment может быть (и довольно часто и бывает) равной NULL.
Если в последней пусто, то надо чтоб это прежде всего не портило результат, да и "пробел и пустые скобки" нам тоже совсем не надо.


Первейшая мысль, которая сразу же пошла в продакшн:
ALTER TABLE test ADD user_title AS f4+' '+f2+' '+f7+ISNULL(' ('+comment+')', '');
Как бы... Строка конкатенирующаяся с NULL даёт NULL, и ISNULL() в таком случае ловит и подменяет слогаемое на пустую строку. Всё ok?


Но я вот задумался - а как это будет для самого сервера? Может есть другое решение, которое или просто быстрее или в чём-то другом лучше для составления плана запроса?
Можно же и вот так:
ALTER TABLE test ADD user_title AS f4+' '+f2+' '+f7+COALESCE(' ('+comment+')', '');
И вот так тоже можно:
ALTER TABLE test ADD user_title AS f4+' '+f2+' '+f7+CASE WHEN comment IS NULL THEN '' ELSE ' ('+comment+')' END;
И фиг знает сколько ещё способов можно навыдумывать при желании...


Подскажите, как будет лучше и почему?

Viewing all articles
Browse latest Browse all 7251

Trending Articles