我正在使用 Excel VBA 并使用 OleDB 连接到 PGSQL。不幸的是,oledb 不允许引用聚合函数之外的列,其中 group by 已应用于表,因此我必须连接数据,但我无法将数据(latestBMI)拆分回 3 个单独的列( eventdate|weight|bmi), 因为权重和 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 个单独的列?
最佳答案
我假设你的表有 4 列
master_id、BMI1、BMI2、BMI3 和 BMI4
您可以使用以下查询生成 INSERT 语句,然后在您的数据库上运行它们
select 'insert into newTable (master_id, BMI1, BMI2, BMI3) values( ' +
cast(master_id as varchar) + ',''' + replace(latestBMI, '|', ''',''') + ''')'
from #t
它生成以下语句(使用您的示例数据)
insert into newTable (master_id, BMI1, BMI2, BMI3) values( 251,'2008-05-08','84','26.8')
insert into newTable (master_id, BMI1, BMI2, BMI3) values( 2848,'1992-11-23','86.71','27.3')
insert into newTable (master_id, BMI1, BMI2, BMI3) values( 2026,'2002-04-16','105','31.6')
insert into newTable (master_id, BMI1, BMI2, BMI3) values( 22316,'2014-02-28','107.955','35.1')
insert into newTable (master_id, BMI1, BMI2, BMI3) values( 16633,'2005-07-04','70','25')
insert into newTable (master_id, BMI1, BMI2, BMI3) values( 9545,'1997-04-08','82.73','24.9')
如果列不是整数,您可以修改 SELECT 语句以获得您需要的内容。但是生成的 INSERT 仍然有效,即使您的列是数字。
关于mysql - 使用分隔符将 SQL 数据拆分为 3 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36436446/