Member 14762163 Ответов: 2

Измените последние 2 символа строкового значения в SQL


Как бы я обновил последние два числа в SQL.

Экс:
249691268200209200209

в:
249691268200209200231

Что я уже пробовал:

Я просто знаю, как выбрать данные, которые заканчиваются хвостом этого числа, я не понимаю, как обновить это число.

Выберите данные из таблицы data_table, где data = '%0209';

Я предполагаю, что:
Обновление data_table в набор данных = '%0231' где данные = '%0209';

2 Ответов

Рейтинг:
2

Richard Deeming

На ум приходит пара вариантов:

UPDATE
    data_table
SET
    data = STUFF(data, Len(data) - 1, 2, '31')
WHERE
    data Like '%0209'
;
Или:
UPDATE
    data_table
SET
    data = Left(data, Len(data) - 2) + '31'
WHERE
    data Like '%0209'
;
NB: Вам нужно использовать Like чтобы соответствовать шаблону; в противном случае вы будете обновлять только те записи, где значение точно равно строке '%0209'.

STUFF (Transact-SQL) - SQL Server | Microsoft Docs[^]
Слева (Transact-SQL) - SQL Server | Microsoft Docs[^]
LIKE (Transact-SQL) - SQL Server | Microsoft Docs[^]


Maciej Los

5ed!

А как насчет правых и подстрочных функций?

Richard Deeming

Substring будет работать:

Substring(data, 1, Len(data) - 2) + '31'

Right не будет. :)

Maciej Los

;)

Рейтинг:
0

ishan_shah

Мы можем решить ее с помощью подстроки, например, следующего запроса обновления :

UPDATE data_table
SET data = SUBSTRING(data, 1, LEN(data) - 2) + '31';

Мы также можем переформулировать этот запрос с помощью метода замены на подстроку
UPDATE data_table
SET data = REPLACE(data, SUBSTRING(data, (LEN(data)-2),(LEN(data)+2)),'31')


Richard Deeming

Ваш первый вариант-это именно то, что я написал в комментариях три недели назад.

Ваш второй вариант просто неверен по нескольким причинам.
- Третий аргумент, чтобы substring это количество возвращаемых символов, а не Индекс последнего возвращаемого символа.
- Если последние две цифры появляются в другом месте строки, все экземпляры будут заменены.

Если вы посмотрите на пример, приведенный в вопросе:
249691268200209200209249691268200209200231
Ваш второй пример неверно изменит значение на:
2496912682003120031