18.4.2 サポートされている式表現
PFM ODBCドライバーは,SELECT文の選択リスト内でだけスカラ演算式の使用をサポートしています。WHERE句などの検索条件内での演算式および副問い合わせはサポートしていません。演算子の優先順位,式の構文,および括弧の使用方法については,次の点を除いて標準規則に従います。
- リテラル文字列に「"」を含めることはできません。
- 共通キーフィールドに対しては,AND接続句だけ利用できます。共通キーフィールドについては,「18.4.4 共通キーフィールドの指定」を参照してください。
- 同一の優先順位を持つ接続句間での演算順序は保証されません。交換則の成り立たない条件式を与える場合,( )を使用して優先順位を明確にしてください。例を次に示します。
- (例)
- A and B and C
- この場合,交換則が成り立つため,問題ありません。
- A or B and C
- この場合,交換則が成り立たないため,A or (B and C)または(A or B) and Cと明示する必要があります。
- <この項の構成>
- (1) 型変換
- (2) 日付,時刻,タイムスタンプ値
(1) 型変換
PFM ODBCドライバーは,すべての標準型変換をサポートしています。数値型は,内部的には次のどれかの数値型になります。
- SQL_TINYINT(1バイトの符号付き整数)
- SQL_SMALLINT(2バイトの符号付き整数)
- SQL_INTEGER(4バイトの符号付き整数)
- SQL_DOUBLE(8バイトの浮動小数点数)
各カラムの型は,ODBCドライバーのデータディクショナリで定義されています。例えば,SQL_SMALLINT型のカラムは,SQL_DOUBLE型のカラムに加算できます。加算結果のカラムは,その結果を格納できる最小の型である,SQL_DOUBLEカラムとなります。
(2) 日付,時刻,タイムスタンプ値
PFM ODBCドライバーは,日付,時刻およびタイムスタンプを示す,次の値を含む式をサポートしています。
- SQL_DATE
- SQL_TIME
- SQL_TIMESTAMP
この値を使用する場合,次の規則が適用されます。
- 加算(+)および減算(-)が使用できます。
- SQL_DATEカラムは日数で表されます。例えば,SQL_DATEカラムに3を加算すると,日付は3日分インクリメントされます。
- SQL_TIMEカラムおよびSQL_TIMESTAMPカラムは秒数で表されます。例えば,SQL_TIMEカラムに3を加算すると,値は3秒分インクリメントされます。基準となる時刻を次に示します。
- SQL_TIMEの場合:午前0時
- SQL_TIMESTAMPの場合:1970年1月1日午前0時
- SQL_TIMEカラムはSQL_DATEカラムにだけ加算できます。また,SQL_DATEカラムはSQL_TIMEカラムにだけ加算できます。加算結果のカラムは,SQL_TIMESTAMPカラムとなります。これは,時刻と日付の両方に作用する可能性がある演算をするときに便利です。なお,日付,時刻およびタイムスタンプのカラムに関連する,その他の演算は,式演算子のどちらの辺でもサポートされません。
- 午前0時は00:00:00と指定してください。また,正午は12:00:00と指定してください。
- WHERE句に,DATE値,TIME値,またはDATETIME値を指定する場合,エスケープシーケンスおよびリテラル文字列は,次の形式で指定してください。指定できる値は,「YYYY MM DD hh:mm:ss」の形式の文字列です。カラム名およびテーブル名の指定方法については,「18.4.3 カラム名およびテーブル名の指定規則」を参照してください。
- エスケープシーケンス
- WHERE NT_PI_TCP.PI_TCP_DATETIME = {ts 'YYYY-MM-DD hh:mm:ss'}
- WHERE NT_PI_TCP.PI_TCP_DATE = {d 'YYYY-MM-DD'}
- WHERE NT_PI_TCP.PI_TCP_TIME = {t 'hh:mm:ss'}
- リテラル文字列
- WHERE NT_PI_TCP.PI_TCP_DATETIME > 'YYYY/MM/DD hh:mm:ss'
- WHERE NT_PI_TCP.PI_TCP_DATE = 'YYYY/MM/DD'
- WHERE NT_PI_TCP.PI_TCP_TIME = 'hh:mm:ss'