1

我有一个数据字段,它使用 @ 符号将一个数据值指定给更广泛的数据集。它类似于但不等同于电子邮件“john@example.com”。第一个 @ 左边的信息是我想要的,但我似乎无法让Instr()函数返回正确的索引@。当我为 创建一列时Instr(1,[DataSet],"[@]"),我得到一个全为 0 的列。重要的是要注意,我正在处理的列中的所有数据都有一个@符号。

我已经读到访问不能很好地处理特殊字符,但我不知道我的问题的解决方法。我将引号内的特殊字符括起来,但似乎没有什么区别。作为参考,要解析的一些示例值是:

MSE3.7 305ST 305@2000 275@3000 notes and things here
MGT5.0 505ST 2013 505@1800 450@2600 other notes w/comments

如您所知,除了“at 符号”之外没有其他常量供我分隔(大约有 400 个这些不同的值),如果我无法让查询按原样工作,这就是我的问题的根源.

期待听到过去的经验/解决方法。

编辑:我的完整查询如下:

SELECT First([QRY_ENGINES_2012-YTD].EngineOptionCd) AS [EngineOptionCd Field], Count([QRY_ENGINES_2012-YTD].EngineOptionCd) AS NumberOfDups, Option.OptionDes, InStr(1,[EngineOptionCd],"[@]") AS [Engine Horsepower] INTO [TBL_2012-13YTD_ENGINES]
FROM [QRY_ENGINES_2012-YTD] INNER JOIN Option ON [QRY_ENGINES_2012-YTD].EngineOptionCd = Option.OptionCd
GROUP BY Option.OptionDes, [QRY_ENGINES_2012-YTD].EngineOptionCd, InStr(1,[EngineOptionCd],"[@]")
HAVING (((Count([QRY_ENGINES_2012-YTD].EngineOptionCd))>1) 
    AND ((OptionDes) Like "*" & "MST" & "*" And (OptionDes) Not Like "*" & "MST12" & "*" And (OptionDes) Not Like "*" & "11.9" & "*")) OR (((OptionDes) Like "*" & "GT" & "*"));

我编辑了一些名字以提供匿名性。它以“查找重复”查询开始,但我想解析其中包含的一些信息。也许这就是问题?需要创建单独的查询?

编辑:问题是我在代码中引用了错误的字段。

4

2 回答 2

0

@丢弃第三个参数中符号周围的方括号InStr

从立即窗口考虑这个例子。前 2 个示例在第一个字符串中查找字符串"[@]"的位置。

? InStr(1, "john@example.com", "[@]")
 0 
? InStr(1, "john[@]example.com", "[@]")
 5 
? InStr(1, "john@example.com", "@")
 5 
于 2013-07-22T23:02:50.957 回答
0

选项是保留字。逃脱它

SELECT First([QRY_ENGINES_2012-YTD].EngineOptionCd) AS [EngineOptionCd Field]
, Count([QRY_ENGINES_2012-YTD].EngineOptionCd) AS NumberOfDups
, [Option].OptionDes
, InStr(1,[EngineOptionCd],"@") AS [Engine Horsepower] 
INTO [TBL_2012-13YTD_ENGINES]
FROM [QRY_ENGINES_2012-YTD] 
INNER JOIN [Option] ON [QRY_ENGINES_2012-YTD].EngineOptionCd = [Option].OptionCd
GROUP BY [Option].OptionDes, [QRY_ENGINES_2012-YTD].EngineOptionCd, InStr(1,[EngineOptionCd],"@")
HAVING (((Count([QRY_ENGINES_2012-YTD].EngineOptionCd))>1) 
    AND ((OptionDes) Like "*" & "MST" & "*" 
    And (OptionDes) Not Like "*" & "MST12" & "*" 
    And (OptionDes) Not Like "*" & "11.9" & "*"))

    OR (((OptionDes) Like "*" & "GT" & "*"));
于 2013-07-22T23:03:11.563 回答