2017-09-28 2 views
0

Access MDBエラーログを持つデバイスをリモートでサービスします。カスタムのWebブラウザインターフェイスを使用すると、限られたSQLクエリをテーブルEalInfoから再度実行できます。 SQL文字列はすべて1行に記述する必要があります。SQL - 複数フィールドの同一フィールドでの条件

以下のコードを使用すると、ErrNumにS_が含まれているレコードを選択できます。これは、不要な多くのレコードが除外されるためです。

Select 
    DTime, 
    ErrNum, 
    Param1, 
    Param2, 
    Controller, 
    vxwErrNo, 
    Info, 
    [TmStamp]/86400 AS DAYS_SinceGantryPwrCycle, 
    [TmStamp]/3600 AS HOURS, 
    [TmStamp]/60 AS MINs 
from EalInfo 
where ErrNum like '%S_%' 
order by DTime Desc 

しかし、2つの一般的ではあるが役に立たないエラーを除外しようとするフィルタを追加すると、レコードは返されません。

where ErrNum like '%S_%' 
    AND ErrNum <> "S_GAFSTARTUPTASK_DTH_BAD_PARAM" 
    AND ErrNum <> "S_DTH_USER_ALREADY_REGISTERED" 

私のSQLスキルはかなり弱い - 私はグーグルで、スクリプトkitty'ed少し - 喜びはありません。

おかげ

+1

「二重引用符」ではなく「一重引用符」を使用してください。 –

+0

@RichBenner。 。 。 MS Accessは文字列に二重引用符を使用します。 –

+0

ああ、それを知らなかった、ありがとう@GordonLinoff –

答えて

0

はので、私は間違っているかもしれ年のアクセスを使用しますが、試してみるない:MS Accessで

SELECT 
     DTime, 
     ErrNum, 
     Param1, 
     Param2, 
     Controller, 
     vxwErrNo, 
     Info, 
     [TmStamp]/86400 AS DAYS_SinceGantryPwrCycle, 
     [TmStamp]/3600 AS HOURS, 
     [TmStamp]/60 AS MINs 

    FROM 
     EalInfo 

    WHERE 
     ErrNum LIKE '*S_*' 
       AND ErrNum <> 'S_GAFSTARTUPTASK_DTH_BAD_PARAM' 
       AND ErrNum <> 'S_DTH_USER_ALREADY_REGISTERED' 

    ORDER BY 
     DTime DESC 
1

を、likeためのワイルドカードは*、ない%です。だから、私はあなたのクエリは、このように見えるように期待:

where ErrNum like '*S_*' and 
     ErrNum <> "S_GAFSTARTUPTASK_DTH_BAD_PARAM" and 
     ErrNum <> "S_DTH_USER_ALREADY_REGISTERED" 

私はこれらすべての条件がerrnumNULL値をフィルタリングすることに注意すべきです。 NULLが必要な場合は、明示的にチェックする必要があります。あなたはおそらくに<>ロジックを簡素化する必要があり

where ErrNum like '*S_*' and 
     ErrNum not in ("S_GAFSTARTUPTASK_DTH_BAD_PARAM", "S_DTH_USER_ALREADY_REGISTERED") 
+0

私はそれに答えたかったが、いくつかの掘り下げをし、[このページ](https://msdn.microsoft.com/en-us/library/ff192499)に出くわしました。いくつかの状況(JET 4またはOLE DBプロバイダをJETに使用している場合)で有効であることを示しています。それはおそらく原因ですが、最初のクエリが正常に機能した理由を私は知らない。 –

+0

返信いただきありがとうございます - 私はあなたの提案を試み、ここに報告します。 LIKEコードが機能し、古いバージョンのJET/OLEが使用されている可能性があります。 – user3687207

0

はあなたに答えたすべての人にをありがとうございます。

私のために働いたコードは次のとおりです。

このカスタム/限定されたSQLインタフェースは、1行にすべてのSQL文字列を必要とする - が、私は読みやすさのためにここでそれをフォーマットしようとしました:

選択

DTime 
ErrNum 
Param1 
Param2 
Controller 
vxwErrNo 
Info 
[TmStamp]/86400 AS DAYS_SinceGantryPwrCycle 
[TmStamp]/3600 AS HOURS 
[TmStamp]/60 AS MINs 

EalInfo

から

(ErrNum like '%S_%') AND 
(ErrNum not like '%S_GAFSTARTUPTASK%') AND 
(ErrNum not like '%S_DTH_USER_ALREADY%') 

続きを見るDTimeは

関連する問題