【发布时间】:2016-07-25 23:44:42
【问题描述】:
我正在使用 Excel VBA 并使用 OleDB 连接到 PGSQL。不幸的是,oledb 不允许引用聚合函数之外的列,其中 group by 已应用于表,因此我必须连接数据,但我无法将数据 (latestBMI) 拆分回 3 个单独的列 ( eventdate|weight|bmi),因为 weight 和 bmi 值的长度不同,但是用管道分隔符分隔。
这是提取后表格的样子:
master_id : latestBMI
251 : 2008-05-08|84|26.8
2848 : 1992-11-23|86.71|27.3
2026 : 2002-04-16|105|31.6
22316 : 2014-02-28|107.955|35.1
16633 : 2005-07-04|70|25
9545 : 1997-04-08|82.73|24.9
我一直在尝试各种方法,尝试 SUBSTRING、CHARINDEX、LEN、LEFT|RIGHT,但都失败了。 这是我当前的代码,但重量和 bmi 的 SUBSTRING 元素是我的问题:
Const sqlconnection = "Provider=oledb;" Dim conn As New Connection conn.ConnectionString = sqlconnection conn.Open Dim rs As Recordset Sheets("Sheet1").Select Range("A1").Select Dim DATA As String DATA = "SELECT latest.master_id, " _ & "SUBSTRING(latestBMI,1,10) eventdate, " _ & "SUBSTRING(latestBMI,12,CHARINDEX('|',latestBMI,RIGHT(latestBMI,7)) weight, " _ & "SUBSTRING(latestBMI,20,4) BMI " _ & "FROM ( " _ & "SELECT master_id, " _ & "MAX(CAST(eventdate AS VARCHAR(10)) + '|' + RIGHT(weightkg,7)+ '|' + RIGHT(bmi,4)) AS latestBMI " _ & "FROM weight " _ & "GROUP BY master_id) as latest " _ & "LEFT JOIN person p on latest.master_id = p.entity_id " Set rs = conn.Execute(DATA) With ActiveSheet.QueryTables.Add(Connection:=rs, Destination:=Range("A1")) .Refresh End With
如何使用管道分隔符将它们分成 3 个单独的列?
【问题讨论】:
-
你有多少条记录?
-
可能有数千行数据
-
你已经用 mysql 和 sql-server 标记了这个,但在你的问题中你声明了 postgre。您实际使用的是哪个 DBMS??
标签: mysql sql-server vba excel