1

@ 記号を使用して 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

おわかりのように、「アットマーク」以外に区切る定数はありません (これらの異なる値は約 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

@の 3 番目の引数で記号を囲む角括弧を破棄し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 に答える