#sql #regex #postgresql #sql-update
Вопрос:
Мне нужно обновить значения столбца varchar, значения начинаются с числа, за которым следует — и затем несколько букв
Для Бывших: 27-Check This
Мне нужно обновить это значение, т. Е. Мне нужно удалить начальное число и -
Пример ожидаемого результата: Check This
ПРИМЕЧАНИЕ: только начальное число и -
должно быть удалено, все значения после первого алфавита не должны изменяться. Т. е., если какое-то число или -
присутствует после первого алфавита, то его не следует удалять.
Для бывших: 27-Check 23-C This
Ожидаемый результат: Check 23-C This
NB: Я новичок в sql, поэтому, пожалуйста, помогите, даже если вам это кажется простым
Комментарии:
1.
regexp_replace
.2. @LaurenzAlbe не могли бы вы, пожалуйста, помочь мне с регулярным выражением, которое будет использоваться здесь ?
Ответ №1:
вы можете использовать regexp_replace
для удаления начальных цифр:
update the_table
set the_column = regexp_replace(the_column, '^[0-9]{1,}s*-s*', '')
where the_column ~ '^[0-9]{1,}'
^[0-9]{1,}-
в деталях:
^
совпадение в начале строки[0-9]{1,}
по крайней мере, одно числоs*
за ним следует ноль или более (белых) пробелов-
затем последовал рывокs*
за ним следует ноль или более (белых) пробелов
where
Предложение гарантирует, что будут изменены только те столбцы, которые необходимо изменить (например, значения, не начинающиеся с числа, вообще не будут затронуты).
Комментарии:
1. Спасибо, что есть пробел после числа Например : 27 — проверьте . Как обновить такого рода значения ?
2. Спасибо a_hourse_with_no_name
Ответ №2:
Если вам просто нужно все после первого дефиса, когда шаблон начинается с числа, вы можете использовать:
update t
set col = substring(col from '-(.*)')
where col ~ '^[0-9] -';
substring()
с шаблоном-это хорошая реализация того, что можно было бы назвать regexp_substr()
в других базах данных. Он просто возвращает первый раз, когда шаблон находится в строке. Полный шаблон соответствует, но если есть круглые скобки, то возвращается только эта часть.