我使用Excel,并使用OleDB连接到PGSQL。不幸的是,oledb不允许引用聚合函数之外的列,其中group被应用到表中,因此我必须将数据连接起来,但是我很难将数据(latestBMI)拆分成3个单独的列(Eventdate),因为权重和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、LEN、LEN、LEN、LEN、这是我目前的代码,但是体重和bmi的超标准元素是我的问题:
Const = "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(最近一次Dim,1,10次)事件,”&“SUBSTRING(最近的Dim,12,CHARINDEX(‘Range’,latestBMI,右(最近的Dim指数,7))重量,”& "SUBSTRING(latestBMI,20,4) BMI“_&”从(“_&”选择master_id,“_&”MAX(事件为VARCHAR(10)+‘AC.26’+RIGHT(体重千克,7)+‘分部’+右(bmi,(4)以latestBMI“_& "FROM With With”_&& "GROUP BY master_id)作为最新的“_&”左联接人p on latest.master_id = p.entity_id“Set rs = conn.Execute(DATA),ActiveSheet.QueryTables.Add(Connection:=rs,Destination:=Range("A1")) .Refresh结尾
如何使用管道分隔符将它们分成3列?
发布于 2016-04-05 20:56:07
如果您可以先获取数据,然后在表中将其拆分,请尝试以下操作(如果您知道您的latestBMI数据将在B2:B7范围内)
Selection.TextToColumns Destination:=Range("B2:B7") DataType:=xlDelimited,_ TextQualifier:=xlDoubleQuote,_ ConsecutiveDelimiter:=False,_ Tab:=False,_ Semicolon:=False,Comma:=False,Space:=False,Other:=True,_ OtherChar:=“x”,_ FieldInfo:=Array(数组(1,1),数组(2,1),数组(3,1)),_ TrailingMinusNumbers:=True
发布于 2016-04-05 20:39:03
我假设您的表有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仍然可以工作。
发布于 2016-04-05 20:55:04
在要导入数据的代码之后,只需使用文本对列进行分隔。
Sub SepDelCol()
Columns("B:B").Select
Selection.TextToColumns _
Destination:=Range("B:B"), _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
Tab:=False, Semicolon:=False, Comma:=False, Space:=False, _
Other:=True, OtherChar:="|"
End Subhttps://stackoverflow.com/questions/36436446
复制相似问题