Замена строки в SQL

#sql #sql-server-2008

#sql #sql-server-2008

Вопрос:

У меня есть таблица базы данных, и я использую SQL Server 2008.

Таблица содержит несколько столбцов, и в одном столбце тип переменной — «Строка». Столбец выглядит следующим образом:

 ColumnA

12301 01

12342 02

12501 01

43201 02

56401 03

56766 01

53478 01

54601 04
  

Между первыми 5 цифрами и последними двумя цифрами есть пробел. Я хочу заменить последние две цифры на 09 , если последние две цифры в строке 01 .

Комментарии:

1. Это могут сделать три функции: REPLACE(), SUBSTRING() и IF(). Вы должны посмотреть их, объединение их — довольно простое упражнение.

2. Вы не можете разделить ее на два столбца, чтобы избежать проблемы?

Ответ №1:

Я бы использовал LIKE оператор, чтобы найти все строки, которые заканчиваются на [пробел] 01, а затем использовал REPLACE метод для замены 01 на 09

 UPDATE  [YourTable]
SET     ColumnA = REPLACE(ColumnA, ' 01', ' 09')
WHERE   ColumnA LIKE '% 01'
  

Вы можете протестировать запрос здесь:https://data.stackexchange.com/stackoverflow/q/116590 /

ПРЕДУПРЕЖДЕНИЕ:

Никогда не запускайте инструкции updates для своих производственных данных без предварительного тестирования их в среде разработки, особенно если вы не писали SQL!

Комментарии:

1. @sll, спасибо за оба аккаунта! Я не видел ничего, что говорило бы, что я не могу использовать DataExplorer для таких вещей, поэтому я продолжаю с этим 🙂

2. Мне не нравятся эти ПРЕДУПРЕЖДАЮЩИЕ комментарии. Давайте предположим, что люди несут ответственность за работу, которую они выполняют.

3. @Frans, я думаю, что голосование против, потому что вам не нравится мое предупреждение, неуместно и зависит от мнения. Это действительное предупреждение и правильный ответ.

4. (пытался) Удалил понижающий голос. Но почему всегда эти предупреждения? Люди задают вопросы, и мы отвечаем на них. Они несут ответственность за профессиональное использование ответов. Меня беспокоит не ваше предупреждение. Что меня беспокоит, так это то, что каждый ответ будет заканчиваться ПРЕДУПРЕЖДЕНИЕМ!

5. отредактируйте свой вопрос, и я снова смогу проголосовать. Какой глупый дизайн 🙂

Ответ №2:

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

 UPDATE Table
SET ColumnA = REPLACE (ColumnA, ' 01', '09')
WHERE ColumnA LIKE '%'   ' 01'
  

Ответ №3:

 UPDATE Table
  SET ColumnName = LEFT(ColumName, 6)   '09'
Where ColumnName LIKE '[0-9][0-9][0-9][0-9][0-9] 01'