Из вопроса я предполагаю, что вы хотите:
- Удалить кавычки
- Удалить запятую
- Поменяйте местами имена
Так что Regexp_replace, вероятно, ваш лучший выбор
UPDATE tablename
SET column_name = REGEXP_REPLACE( column_name, '^"(\w+), (\w+)"$', '\2 \1' )
Итак, regexp_replace
меняет значение столбца, если оно точно соответствует шаблону. Какие части выражения
^"
означает, что он должен начинаться с двойной кавычки
(\w+)
означает, что сразу же следует строка из 1 или более буквенно-цифровых символов. Затем эта строка сохраняется в качестве переменной \1
, поскольку ее первый набор ()
,
означает сразу после запятой и пробел
(\w+)
означает, что сразу же следует строка из 1 или более буквенно-цифровых символов. Затем эта строка сохраняется в качестве переменной \2
, поскольку это второй набор ()
"$
означает, что сразу следует двойная кавычка, являющаяся концом строки
\2 \1
- строка замены, вторая сохраненная строка, за которой следует пробел, за которым следует первая сохраненная строка
Таким образом, все, что не соответствует этим условиям, не будет заменено. Поэтому, если у вас есть начальные или пробельные символы, или несколько пробелов после запятой, или по многим другим причинам текст не будет заменен.
Гораздо более гибкий (возможно, слишком гибкий) вариант может быть:
UPDATE tablename
SET column_name = REGEXP_REPLACE( column_name, '^\W*(\w+)\W+(\w+)\W*$', '\2 \1' )
Это аналогично, но эффективно делает кавычки и запятую необязательными, и имеет дело с любой другой ведущей или конечной публикацией или пробелом.
^\W*
означает, что должен начинаться с ноль или более, не являющихся алфавитами
(\w+)\W+(\w+)
означает две буквенно-цифровые строки, разделенные одной или несколькими не буквенно-цифровыми цифрами. Две строки сохраняются, как описано выше
\W*$
означает, что в этом случае должно заканчиваться ноль или более, не являющимися алфавитными числами
Подробнее о регулярном выражении в Oracle можно узнать здесь