首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用分隔符将SQL数据拆分为3列

使用分隔符将SQL数据拆分为3列
EN

Stack Overflow用户
提问于 2016-04-05 20:30:09
回答 4查看 755关注 0票数 2

我使用Excel,并使用OleDB连接到PGSQL。不幸的是,oledb不允许引用聚合函数之外的列,其中group被应用到表中,因此我必须将数据连接起来,但是我很难将数据(latestBMI)拆分成3个单独的列(Eventdate),因为权重和bmi值在长度上是不同的,但是被一个管道分隔。

下面是通过提取表的样子:

代码语言:javascript
复制
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列?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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

票数 0
EN

Stack Overflow用户

发布于 2016-04-05 20:39:03

我假设您的表有4列

master_id,BMI1,BMI2,BMI3和BMI4

可以使用下面的查询生成INSERT语句,然后在数据库中运行它们。

代码语言:javascript
复制
select 'insert into newTable (master_id, BMI1, BMI2, BMI3) values( ' +
   cast(master_id as varchar) + ',''' + replace(latestBMI, '|', ''',''') + ''')'
from #t

它生成以下语句(使用示例数据)

代码语言:javascript
复制
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仍然可以工作。

票数 1
EN

Stack Overflow用户

发布于 2016-04-05 20:55:04

在要导入数据的代码之后,只需使用文本对列进行分隔。

代码语言:javascript
复制
    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 Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36436446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档