2016-02-20 1 views
-2

У меня есть таблица, которая выглядит следующим образом: «?»Обновление таблицы, заменив строку в одной колонке с подстроки

id | name      | color 
----|-----------------------------|------- 
1 | some string?12345   | red 
2 | another string?843   | red 
3 | and another string?84930283 | blue 

Мне нужно обновить столбец имен для всех строк, чтобы удалить и все после него. Таким образом, конечный результат должен быть:

id | name    | color 
----|--------------------|------- 
1 | some string  | red 
2 | another string  | red 
3 | and another string | blue 

ответ

2

Вы можете использовать split_part:

SELECT split_part(name, '?', 1) 
FROM mytable 

Для UPDATE Вы можете использовать:

UPDATE mytable 
SET name = split_part(name, '?', 1) 
WHERE strpos(name, '?') <> 0 

Demo here

+0

Вам нужна последняя строка ('WHERE strpos (name, '?') <> 0')? Что произойдет, если я не буду использовать эту линию? – Senju

+0

@ Сенью. Вам это нужно, чтобы избежать избыточных обновлений. Если вы не используете его, результат будет таким же, но операция обновления может занять больше времени. –

1

Использование LEFT и POSITION строковые функции. Официальный link

Для просмотра результата

Select id, LEFT(name,POSITION('?' in name)-1) as Name, Color 
From Yourtable 

Для update

Update Yourtable 
SET name = LEFT(name,POSITION('?' in name)-1) 
Where POSITION('?' in name)> 0 
2

Или, может быть ... просто добавить еще один подход:

SQL> update table set name = substring(name from '^[^?]*') ; 
0

Что касается вопроса: String Functions and Operators

оффтопик, не прочитайте все ниже.

В начале были доисторические люди, которые передавали знание в устной форме.

Тогда были книги, и каждый, у кого есть доступ к ним, может получить от них знания.

Затем пришел Google, и каждый смог получить ответ на хорошо заданный вопрос.

Затем появился StackOverflow, и любой мог попросить кого-нибудь спросить у Google и получить от них ответ за некоторые награды.

Что дальше?

Смежные вопросы