Добавление символа в существующую строку - PullRequest
1 голос
/ 15 мая 2019

Извините, если я пропустил возможное решение моей проблемы, но мне нужны некоторые указатели. Я уверен, что есть простое решение, но я не вижу его (в настоящее время).

Итак, у меня есть таблица Postgres DB, которая требует массового обновления, просто добавив один символ в определенной позиции в строке.

пример:

select PINFO.title, SUBSTRING(PINFO.title FROM ',\ (.+). del') AS ep_num from my_table where my_condition...

так что я получаю что-то вроде этого:

+--------------------+--------+
|       title        | ep_num |
+--------------------+--------+
| my_series, 01. del |     01 |
| my_series, 10. del |     10 |
| my_series, 11. del |     11 |
| my_series, 2. del  |      2 |
| my_series, 3. del  |      3 |
| my_series, 4. del  |      4 |
| my_series, 5. del  |      5 |
| my_series, 6. del  |      6 |
| my_series, 7. del  |      7 |
| my_series, 8. del  |      8 |
| my_series, 9. del  |      9 |
+--------------------+--------+

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

+--------------------+--------+
|       title        | ep_num |
+--------------------+--------+
| my_series, 01. del |     01 |
| my_series, 10. del |     10 |
| my_series, 11. del |     11 |
| my_series, 02. del |     02 |
| my_series, 03. del |     03 |
| my_series, 04. del |     04 |
| my_series, 05. del |     05 |
| my_series, 06. del |     06 |
| my_series, 07. del |     07 |
| my_series, 08. del |     08 |
| my_series, 09. del |     09 |
+--------------------+--------+

Какой будет наилучший подход? Мне нужно обновить таблицу, а не просто напечатать вывод таким образом. Спасибо! M.

1 Ответ

0 голосов
/ 15 мая 2019

демо: дБ <> скрипка

UPDATE my_table
SET 
    title = 'my_series, ' || lpad(ep_num, 2, '0') || '. del',
    ep_num = lpad(ep_num, 2, '0')

Использование функции lpad()


без ep_num column :

demo: db <> fiddle

UPDATE my_table mt
SET title = parts[1] || ' ' || lpad(parts[2], 3, '0') || ' ' || parts[3]
FROM (
    SELECT 
        title,
        regexp_split_to_array(title, ' ') AS parts
    FROM
        my_table
) s
WHERE mt.title = s.title

regexp_split_to_table() разделяет заголовок в пробелах на три части.Они могут быть объединены снова после заполнения левой части второй части.Функция lpad() здесь создает текст длиной 3 символа вместо 2, поскольку разделение перед этим также касается точки.

...