SQL - Функция замены строки не работает должным образом - PullRequest
0 голосов
/ 09 июля 2020

У меня простая строка; например, '01023201580001'.

Я хотел бы заменить последние два символа этой строки; '01' с '00'.

Я мог бы извлечь последние два символа из этой строки как RIGHT(columname,2), а затем использовать

REPLACE([columname], RIGHT([columname], 2), '00') as newColumnString

Но в результате он заменяет первый тоже два символа?

Ожидаемый результат: 010232015800 00

Результат Я получаю: 00 0232015800 00

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Второй аргумент функции replace() определяет шаблон для сопоставления. Функция будет искать все экземпляры этого шаблона в целевой строке (первый аргумент) и заменять их заменяющим текстом (третий аргумент).

Если вы знаете, что вам нужно только изменить последние два символа, вы можете взять значение, исключая эти символы, а затем добавить нужные символы:

select left(columname, len(columname) - 2) + '00';

Если вы делаете это для всего столбца, и некоторые строки могут не заканчиваться на '01 ', вы можете отфильтровать их:

update MyTable
set    columname = left(columname, len(columname) - 2) + '00'
where  columname like '%01';

Вы также можете использовать stuff() аналогичным образом.

1 голос
/ 09 июля 2020

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

DECLARE @s NVARCHAR(20) = N'01023201580001';
DECLARE @ReplaceWith NVARCHAR(20) = N'00';

SELECT SUBSTRING(@s, 0, LEN(@s) - 1) + @ReplaceWith;

Вывод: 01023201580000

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...