Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL查询中拆分非名称列_Sql_Excel_Vba_Odbc_Ado - Fatal编程技术网

在SQL查询中拆分非名称列

在SQL查询中拆分非名称列,sql,excel,vba,odbc,ado,Sql,Excel,Vba,Odbc,Ado,我想使用CSV文件Test1.CSV创建具有自定义列名的记录集 CSV文件格式: (Blank) | SomeAggr | (Blank) | Div1 | Div2 | Div3 ----------------------------------------------------------- G0.1 | 1.23 | | ABC | DEF | GHI G0.2 | 2.45

我想使用CSV文件Test1.CSV创建具有自定义列名的记录集

CSV文件格式:

(Blank) | SomeAggr | (Blank) | Div1 | Div2 | Div3 ----------------------------------------------------------- G0.1 | 1.23 | | ABC | DEF | GHI G0.2 | 2.45 | | JKL | MNO | PQR G0.3 | 9.02 | | STU | VWX | YZA G1.1 | 3.32 | | ZYX | WVU | TSR G1.2 | 5.53 | | QPO | NML | KJI G1.3 | 1.15 | | HGF | EDC | BAZ G1.4 | 4.65 | | FKJ | OTU | WKL 代码给出了以下错误:

[Microsoft][ODBC文本驱动程序]“”不是有效的名称。确保它不包含无效字符或标点符号,并且不太长

我不知道如何获取引用或选择第一个空白列以将其值拆分为两列


查询在MSAccess中工作,第一个NoName列显示为字段1第二个NoName列显示为字段3,当我尝试复制您的代码时,我得到以下信息: a) 不确定这是否是问题所在,但您有两个列名称[NoName],因此需要区分这两个列。(b) 你能把非名称列放在方括号里,用单引号代替双引号吗

SELECT 
    CLng(Replace(Left(NoName, InStr(NoName, ".") - 1), "G", "")) AS [GVal],
    CLng(Right(NoName, Len(NoName) - InStr(NoName, "."))) AS [Pos], [SomeAggr] AS [Aggr],
    NoName, 
    [Div1] AS [DV A], 
    [Div2] AS [DV B], 
    [Div3] AS [DV C] 
FROM 
    `C:\Temp`\Test.csv

SQL代码需要单引号作为字符串删除器,而不是双引号。在oRs.Fields中每个Fld的
循环中,有两行在构造
strSql
时使用双引号而不是单引号:

strSql = strSql & "CLng(Replace(Left(" & Fld.Name & ", InStr(" & Fld.Name & ", ""."") - 1), ""G"", """"))" & " AS [GVal], "
strSql = strSql & "CLng(Right(" & Fld.Name & ", Len(" & Fld.Name & ") - InStr(" & Fld.Name & ", ""."")))" & " AS [Pos], "
这些应改为:

strSql = strSql & "CLng(Replace(Left(" & Fld.Name & ", InStr(" & Fld.Name & ", '.') - 1), 'G', ''))" & " AS [GVal], "
strSql = strSql & "CLng(Right(" & Fld.Name & ", Len(" & Fld.Name & ") - InStr(" & Fld.Name & ", '.')))" & " AS [Pos], "

发布您正在生成的完整SQL语句可能会很有用。我猜简单地指定一个列别名就可以解决这个问题(
选择xyz作为ColumnAlias
)。@Martin如您所见,我正在指定别名,例如将
第一列拆分为[GVal]、
第一列拆分为[Pos]
。不工作!!!让我看看是否可以编辑帖子以共享SQL查询。您是否在问题行之前尝试过执行
Debug.Print strSql
,以便验证字符串值是否符合预期?@Mistella,您刚才删除了之前的注释?这就是答案!它正在工作。:-)你能把你的答案再贴一次吗,这样我就可以接受它作为解决方案了?非常感谢。。。。(从我的错误中吸取教训)@sifar我会将我的评论作为回答转发记录集已经为没有标题的列提供了
NoName
名称。至于Mistella给出的解决方案,就是对“.”、“G”和“”使用单引号,而不是双引号。希望这有帮助。感谢@Mistella指出我做错了什么…从我的错误中吸取教训…:-)
strSql = strSql & "CLng(Replace(Left(" & Fld.Name & ", InStr(" & Fld.Name & ", '.') - 1), 'G', ''))" & " AS [GVal], "
strSql = strSql & "CLng(Right(" & Fld.Name & ", Len(" & Fld.Name & ") - InStr(" & Fld.Name & ", '.')))" & " AS [Pos], "