我有一个数据字段,它使用@符号将一个数据值指定给更广泛的数据集。它类似但不等同于电子邮件“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 sign'之外没有常量可以分隔(这些不同的值中有大约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" & "*"));
我编辑了一些名字以提供匿名。它起初是一个“查找重复”查询,但我想解析一些包含的信息。也许这就是问题?需要创建单独的查询吗?
编辑:问题是我在代码中引用了错误的字段。
答案 0 :(得分:0)
弃掉@
第三个参数中InStr
符号周围的方括号。
从立即窗口考虑此示例。前两个示例在第一个字符串中查找字符串“[@]”的位置。
? InStr(1, "john@example.com", "[@]")
0
? InStr(1, "john[@]example.com", "[@]")
5
? InStr(1, "john@example.com", "@")
5
答案 1 :(得分: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" & "*"));