对不起,如果我错过了解决问题的方法,但是我需要一些指导。我敢肯定有一个简单的解决方案,但是(目前)我没有看到它。
所以我有一个需要大量更新的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。
答案 0 :(得分:0)
UPDATE my_table
SET
title = 'my_series, ' || lpad(ep_num, 2, '0') || '. del',
ep_num = lpad(ep_num, 2, '0')
使用lpad()
功能
没有ep_num
列:
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个字符,因为之前的拆分也涉及点。