问题描述
我有一个 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)|
我该怎么做?
解决方法
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
- 将第一列的数据拆分成一个数组
- 将第二列的数据拆分为
{a(a),b(b),c(c)}
形式的数组 - 将所有数组元素转置为自己的记录
- 将表单
a(b)
的元素拆分为表单{a,b}
的数组 - 显示所需的列。对于
col2
和col3
显示第 4 步中的第一个或第二个数组元素