Я хочу применить вычисление OUTER APPLY к каждой строке набора. Это вычисление объединяет несколько строковых полей в одно, но иногда эти поля являются нулевыми или заполнены пустыми строками. Конкатенация использует «-» в качестве разделителя между полями, поэтому, когда они пусты («»), результатом будет «----» вместо NULL, результат, который я хотел бы получить.
Перед выполнением этого вычисления мне нужно проверить значение этих полей.
Как бы вы это сделали?
Я думал об использовании NULLIF, и похоже, что он ведет себя так, как я ожидал, но я не знаю почему.
Будет ли конкатенация NULL + 'нечто' всегда иметь значение NULL? Зачем?
SELECT
string_1,
string_2,
string_3,
string_4,
string_5,
string_concat,
FROM Table1
OUTER APPLY(VALUES(NULLIF(string_1,'')+'-'+NULLIF(string_2,'')+'-'+NULLIF(string_3,'')+'-'+NULLIF(string_4,'')+'-'+NULLIF(string_5,''))) v1(string_concat)
Таблица1 не имеет никакого индекса, и я не могу его реализовать.
Этот код лучше с точки зрения производительности, чем выполнение CASE в SELECT?
Мне это нравится, потому что код выглядит более чистым.