SQL заменяет старые значения новыми - PullRequest
4 голосов
/ 27 октября 2009

У меня есть таблица с именем tbl.Products, которая имеет столбец с именем articlenumber и полна чисел типа s401, s402 и т. Д.

Я создал список с новыми номерами артикулов, которые заменят старые:

s401  I00010  
s402  I00020  
s403  I00030  
s403  I00040  
...  

У меня есть запрос, из которого я надеялся, что это сработает, но почему-то ничего не происходит.

(конечно, я вложил другие значения в запрос)

SELECT REPLACE('articlenumber','s401','I00010') FROM tbl.Products

Как получить запрос, который заменяет старые значения новыми в столбце, подобном этому?

Ответы [ 2 ]

12 голосов
/ 27 октября 2009

При замене могут возникнуть проблемы (что, если у вас есть статьи s401 и s4010?), Поэтому будет более надежно сделать это следующим образом:

Update tblProducts
SET articlenumber = 'I000010'
Where articlenumber = 's401';

Если у вас есть ряд изменений, вы можете либо создать небольшой скрипт (например, в Excel, как предложил TheButcher), либо импортировать данные в небольшую таблицу tblVals со столбцами oldVal и newVal, а затем используйте это утверждение:

Update tblProducts p
SET articlenumber = (Select newVal
    From tblVals
    where oldVal = p.articlenumber);

Это позволяет вам выполнить обновление одним оператором, который снова будет более надежным, чем запуск скрипта, который может столкнуться с проблемами, если он действительно длинный.

Третья идея состоит в том, чтобы сделать логику в построении нового номера для старого номера (если такая вещь существует) в SQL (или хранимой процедуре), например:

Update tblProducts p
SET articlenumber = 'I0000' || Right(articlenumber,1) || '0'

(Конечно, это полностью упрощено и, вероятно, недостаточно для ваших 30-тысячных строк).

8 голосов
/ 27 октября 2009

Вы просто выбираете недавно замененные значения и ничего не делаете с ними ... это очень хорошая идея при использовании замены, всегда сначала выбирайте дважды, чтобы убедиться, что вы получите ожидаемый результат:)

Код обновления -

Update  tbl.Products
Set articlenumber = replace(articlenumber, 's401', 'I00010') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...