#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'