Условная замена в зависимости от другого значения столбца - PullRequest
0 голосов
/ 04 июня 2018

У меня есть база данных с таблицей, содержащей:

********************************
* Code  *      FileName        *
********************************
* NULL  * Cats and Dogs        *
* C123  * C123 - Cats and Dogs *
* NULL  * Baking Cakes         *
* Z345  * Z345 - Plants        *
* F967  * E345 - Tractors      *
********************************

Я хотел бы вернуть имя файла или имя файла для всех строк, основываясь на том, есть ли значение в столбце кода исоответствует коду в имени файла.

Таким образом, запрос должен вернуть

Cats and Dogs
xxxx - Cats and Dogs
Baking Cakes
xxxx - Plants
E345 - Tractors

Из вышеприведенного набора данных.

Я пытаюсь выполнить условную замену значения из другого столбца - еслиЯ сделал это с помощью описания случая, мне нужно было перечислить все возможные коды, которые было бы трудно поддерживать.Есть ли способ сделать

Select Replace(FileName, Code, "xxxx") from table where filename like %Code%

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Попробуйте это

CREATE TABLE #tmp (Code varchar(25), FileName varchar (25))

INSERT INTO #tmp VALUES
(NULL, 'Cats and Dogs '),
('C123', 'C123 - Cats and Dogs'),
(NULL, 'Baking Cakes'),
('Z345', 'Z345 - Plants'),
('F967', 'E345 - Tractors')

SELECT  
CASE 
      WHEN CHARINDEX(Code, FileName,1)>0 THEN Replace(FileName, Code, 'xxxx') 
      ELSE FileName 
END As Result
FROM #tmp

enter image description here

0 голосов
/ 04 июня 2018

Вы можете попробовать следующий запрос:

SELECT
    CASE WHEN Code IS NULL
         THEN FileName
         ELSE REPLACE(FileName, Code + ' - ', 'xxxx - ') END AS label
FROM yourTable;

enter image description here

Демо

Здесь не обязательно нужно выражение WHERE, поскольку логика замены уже проверяет, есть ли совпадение.Обратите внимание, что я ищу code -, то есть код в контексте, в котором вы ожидаете.Уменьшает, хотя бы частично, вероятность ложной замены.

...