向现有字符串添加字符

时间:2019-05-15 08:12:06

标签: string postgresql insert sql-update substring

对不起,如果我错过了解决问题的方法,但是我需要一些指导。我敢肯定有一个简单的解决方案,但是(目前)我没有看到它。

所以我有一个需要大量更新的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 |
+--------------------+--------+

所以我想在数字小于10的地方添加一个0,所以我的预期结果应该是:

+--------------------+--------+
|       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 :(得分:0)

demo: db<>fiddle

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

使用lpad()功能


没有ep_num

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个字符,因为之前的拆分也涉及点。