Хочу добавить простейшую вычисляемую колонку.
Всё вычисление состоит в том, чтоб слепить через пробел значения из нескольких колонок этой же таблицы, а последнее в скобках.
Если в последней пусто, то надо чтоб это прежде всего не портило результат, да и "пробел и пустые скобки" нам тоже совсем не надо.
Первейшая мысль, которая сразу же пошла в продакшн:
Но я вот задумался - а как это будет для самого сервера? Может есть другое решение, которое или просто быстрее или в чём-то другом лучше для составления плана запроса?
Можно же и вот так:
Подскажите, как будет лучше и почему?
Всё вычисление состоит в том, чтоб слепить через пробел значения из нескольких колонок этой же таблицы, а последнее в скобках.
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;И фиг знает сколько ещё способов можно навыдумывать при желании...
Подскажите, как будет лучше и почему?