在 PostgreSQL 中解析文本数据

问题描述

我有一个 Postgresql 数据库一个表有 2 个文本列,存储的数据如下:

Private Sub test()
   Dim SelectedTexts As String
   Dim index As Long
   
   For index = 0 To ListBox1.ListCount - 1
      If ListBox1.Selected(index) Then
         SelectedTexts = SelectedTexts & ListBox1.List(index) & ","
      End If
   Next

   SelectedTexts = Mid(SelectedTexts,1,Len(SelectedTexts) - 2) & "."
   index = InStrRev(SelectedTexts,",")
   If index > 0 Then SelectedTexts = Left(SelectedTexts,index - 1) & " and " & Right(SelectedTexts,Len(SelectedTexts) - index - 1)

   ActiveDocument.SelectContentControlsByTitle("test").Item(1).Range.Text = SelectedTexts
End Sub

我需要像这样解析新表中的行:

id|         col1              |                     col2                      |
------------------------------------------------------------------------------|
1 | value_1,value_2,value_3 | name_1(date_1),name_2(date_2),name_3(date_3)|
2 | value_4,value_5,value_6 | name_4(date_4),name_5(date_5),name_6(date_6)|

我该怎么做?

解决方法

step-by-step demo:db<>fiddle

SELECT
    id,u_col1 as col1,col2_matches[1] as col2,-- 5
    col2_matches[2] as col3
FROM 
    mytable,unnest(                                                      -- 3
        regexp_split_to_array(col1,','),-- 1
        regexp_split_to_array(col2,')                        -- 2
    ) as u (u_col1,u_col2),regexp_matches(u_col2,'(.+)\((.+)\)') as col2_matches       -- 4
  1. 将第一列的数据拆分成一个数组
  2. 将第二列的数据拆分为 {a(a),b(b),c(c)} 形式的数组
  3. 将所有数组元素转置为自己的记录
  4. 将表单 a(b) 的元素拆分为表单 {a,b} 的数组
  5. 显示所需的列。对于 col2col3 显示第 4 步中的第一个或第二个数组元素