【问题标题】:How to replace a newline character with row number in Postgres / sql?如何在 Postgresql 中用行号替换换行符?
【发布时间】:2022-06-15 21:58:37
【问题描述】:

如何根据id在字符串中用行号替换换行符以下是表格中一行的示例,表格有很多行,每行应该以1开头,依此类推。

sample data 
I
am
Awesome 

desired out put 
1.I 
2.am 
3.Awesome  

I tried to replace newline with rownumber but no success

select concat(1.,replace(field,char(10),cast(1+row_number()over(order by field) as varchar),'.') as desired_Formula from tbl 

欢迎任何帮助或建议,如果不使用 cte 完成应该是理想的。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    一种选择是基于换行符创建一个数组,然后用序数将其取消嵌套,这样您就有了一个行号,如果需要,可以从那里再次将其转换为单行:

    SELECT string_agg(id || '.' ||word,E'\n')
    FROM tbl
    CROSS JOIN LATERAL 
      UNNEST(string_to_array(sample,E'\n')) WITH ORDINALITY j (word,id)
    GROUP BY sample;
    
     string_agg 
    ------------
     1.I       +
     2.am      +
     3.Awesome
    (1 Zeile)
    

    如果您想将项目拆分为多行,只需去掉string_agg

    SELECT id || '.' ||word
    FROM tbl
    CROSS JOIN LATERAL 
      UNNEST(string_to_array(sample,E'\n')) WITH ORDINALITY j (word,id);
    
     ?column?  
    -----------
     1.I
     2.am
     3.Awesome
    (3 Zeilen)
    

    演示:db<>fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 2012-04-08
      相关资源
      最近更新 更多