AnsweredAssumed Answered

PI OLEDB Providerでタグ検索する際に「Is good」を条件とする方法

Question asked by KatsumasaNakaki on Oct 24, 2019
Latest reply on Oct 31, 2019 by KatsumasaNakaki

PI DataLink にてタグ検索をする際、フィルター条件として「Is good」が選択できます。

同じようにPI OLEDB でのタグ検索で「Is good」を条件として使用したいのですが、

[pipoint]..[pipoint]テーブル 及び [pipoint]..[pipoint2]テーブルに該当しそうなフィールドがありません。

 

色々と動かしてみて、[piarchive]..[pisnapshot]テーブルのstatus列を使えば「Is good」の判断が出来そうだと思ったのですが、status列に入っている値が「Is good」に該当するのかどうかの判断方法がわかりません。

考えられる判断方法として下記3通りがありますが、どの方法を使うべきでしょうか?

または他の方法があるのでしょうか?

 

1. status = 0

    → status が0のみを Is good と判断して良いのでしょうか?

        後述する [pids]..[SYSTEM]テーブルを確認すると、0以外の値でも「Good」がありますが、

        その値は is good では無いのでしょうか?

SELECT pp.tag, ps.status
FROM [pipoint]..[pipoint] pp 
    INNER JOIN [piarchive]..[pisnapshot] ps ON ps.tag = pp.tag 
WHERE
    ps.status = 0

 

2. [pids]..[SYSTEM]テーブルのname='Good'

SELECT pp.tag, ps.status, sy.name
FROM [pipoint]..[pipoint] pp
  INNER JOIN [piarchive]..[pisnapshot] ps ON ps.tag = pp.tag
  INNER JOIN [pids]..[SYSTEM] sy ON sy.code = ps.status
WHERE

  sy.name 'Good'

 

3. DIGSTRING(status) = 'Good'

    → WHERE句の左辺に関数を使うのは遅くならないでしょうか?

        (全レコードに対して関数を適用するような動きをしてしまわないでしょうか?)

SELECT pp.tag, ps.status, DIGSTRING(ps.status) 
FROM [pipoint]..[pipoint] pp 
    INNER JOIN [piarchive]..[pisnapshot] ps ON ps.tag = pp.tag 
WHERE
    DIGSTRING(ps.status) = 'Good'

Outcomes