この記事を読むメリット
ABAPで比較演算子を使って数値や文字列の比較を行い、条件分岐やデータの検証を行えるようになります。
ABAPを使用してプログラムを開発する際には、様々な条件分岐やデータ検証を行うために比較演算子を頻繁に使用します。この記事では、ABAPで使用できる比較演算子の種類とそれぞれの使用方法について、実例を交えて詳しく解説します。
この記事のポイント
比較演算子とは
比較演算子は、プログラム内で2つの値を比較し、その結果が「真(TRUE)」か「偽(FALSE)」かを判定するために使われます。これにより、条件に基づいた動作を制御することができます。
ABAPでは、数値や文字列、日付 などのデータ型に対して使用できる基本的な比較演算子のほかに、文字列に特化した特殊な比較演算子 も用意されています。この記事では、これらの演算子の使い方を実例とともに紹介します。
基本的な比較演算子
ABAPでよく使われる比較演算子は以下の通りです。これらは、数値や文字列、日付の大小や等しさを比較するために使用されます。
演算子 ABAP表記 説明 例 = EQ 等しい lv_value = 10 または lv_value EQ 10 <> NE 等しくない lv_value <> 10 または lv_value NE 10 < LT より小さい lv_value < 10 または lv_value LT 10 > GT より大きい lv_value > 10 または lv_value GT 10 <= LE 以下 lv_value <= 10 または lv_value LE 10 >= GE 以上 lv_value >= 10 または lv_value GE 10
比較演算子(ABAP)
等しい(EQ or ₌)
等号演算子 は、2つの値が等しいかどうかを比較します。数値、文字列、日付、時間などの様々なデータ型で使用できます。
使用例
DATA: lv_value TYPE i.
lv_value = 10.
IF lv_value = 10.
WRITE: '値は10です。'.
ENDIF.
IF lv_value EQ 10.
WRITE: / 'ABAP表記:値は10です。'.
ENDIF.
このプログラムでは、lv_valueが10であれば、どちらの条件も真となり「値は10です。」と表示されます。
等しくない(NE or <>)
等しくないことを確認する際には、<> または NE を使用します。
使用例
DATA: lv_value TYPE i.
lv_value = 5.
IF lv_value <> 10.
WRITE: '値は10ではありません。'.
ENDIF.
IF lv_value NE 10.
WRITE: / 'ABAP表記:値は10ではありません。'.
ENDIF.
このプログラムでは、lv_valueが10ではない場合、どちらの条件も真となり「値は10ではありません。」と表示されます。
大小関係の演算子(LT, GT, LE, GE)
大小関係を確認する演算子もABAPでは頻繁に使用されます。これらの演算子を使用して、数値や文字列、日付の順序を比較できます。
<(より小さい)はLT、>(より大きい)はGT、<=(以下)はLE、>=(以上)はGEと表記できます。
使用例
DATA: lv_value TYPE i.
lv_value = 8.
IF lv_value > 5 AND lv_value < 10.
WRITE: '値は5より大きく10より小さいです。'.
ENDIF.
IF lv_value GT 5 AND lv_value LT 10.
WRITE: / 'ABAP表記:値は5より大きく10より小さいです。'.
ENDIF.
このプログラムでは、lv_valueが5より大きく10より小さい場合、どちらの条件も真となり、どちらのメッセージも表示されます。
文字列用の特殊な比較演算子
ABAPには、文字列の比較に特化した特殊な演算子も用意されています。これらの演算子は、文字列のパターンマッチングや部分一致を確認するのに便利です。
演算子 説明 例 CO (Contains Only) 左辺の文字列が右辺のパターンに一致する lv_string CO ‘SAP2024’ →lv_string が “SAP2024” と一致するかを確認 CN (Contains Not) 左辺の文字列が右辺のパターンに一致しない lv_string CN ‘SAP2025’ →lv_string が “SAP2025” と一致しないかを確認 CA (Contains Any) 左辺の文字列が右辺の文字セットのいずれか を含む lv_string CA ‘ABC’ →lv_string に “A”, “B”, “C” のいずれかが含まれているか NA (Not Contains Any) 左辺の文字列が右辺の文字セットを全く含まない lv_string NA ‘0123456789’ →lv_string に数字が全く含まれていないか CP (Contains Pattern) 左辺の文字列が右辺のパターンに一致するか lv_string CP ‘SAP*’ →lv_string が “SAP” で始まるかを確認 NP (Not Contains Pattern) 左辺の文字列が右辺のパターンに一致しないか lv_string NP ‘XYZ*’ →lv_string が “XYZ” で始まらないかを確認 CS (Contains String) 左辺の文字列が右辺の部分文字列を含むか lv_string CS ‘SAP’ →lv_string に “SAP” が含まれているかを確認 NS (Not Contains String) 左辺の文字列が右辺の部分文字列を含まないか lv_string NS ‘2025’ →lv_string に “2025” が含まれていないかを確認
文字列用の特殊な比較演算子(ABAP)
CO(Contains Only)
CO演算子は、左辺の文字列が右辺のパターンに完全に一致するかを確認します。
使用例
DATA: lv_string TYPE string VALUE 'SAP2024'.
IF lv_string CO 'SAP2024'.
WRITE: '文字列は「SAP2024」と一致します。'.
ENDIF.
このプログラムでは、lv_string が “SAP2024” と一致するかを確認します。
CN(Contains Not)
CN演算子は、左辺の文字列が右辺のパターンに一致しない場合に真となります。
使用例
DATA: lv_string TYPE string VALUE 'SAP2024'.
IF lv_string CN 'SAP2025'.
WRITE: '文字列は「SAP2025」と一致していません。'.
ENDIF.
このプログラムでは、lv_string が “SAP2025” と一致しないかを確認します。
CA(Contains Any)
CA 演算子は、左辺の文字列が右辺の文字セットのいずれかを含むかを確認します。
使用例
DATA: lv_string TYPE string VALUE 'SAPABC123'.
IF lv_string CA 'CBA'.
WRITE: '文字列には「A」「B」「C」のいずれかが含まれています。'.
ENDIF.
このプログラムでは、lv_string に “A”, “B”, “C” のいずれかが含まれているかを確認します。
NA(Not Contains Any)
NA 演算子は、左辺の文字列が右辺の文字セットをまったく含まないかを確認します。
使用例
DATA: lv_string TYPE string VALUE 'SAPXYZ'.
IF lv_string NA '0123456789'.
WRITE: '文字列には数字が含まれていません。'.
ENDIF.
このプログラムでは、lv_string に数字が含まれていないかを確認します。
CP(Contains Pattern)
CP演算子は、左辺の文字列が右辺のパターンに一致するかを確認します。こちらもワイルドカード(* で任意の文字列、+ で1文字)を使います。
使用例
DATA: lv_string TYPE string VALUE 'SAP2024'.
IF lv_string CP 'SAP*'.
WRITE: '文字列は「SAP」で始まります。'.
ENDIF.
このプログラムでは、lv_string が “SAP” で始まるかを確認します。
NP(Not Contains Pattern)
NP 演算子は、左辺の文字列が右辺のパターンに一致しない場合に真となります。
使用例
DATA: lv_string TYPE string VALUE 'SAP2024'.
IF lv_string NP 'XYZ*'.
WRITE: '文字列は「XYZ」で始まりません。'.
ENDIF.
このプログラムでは、lv_string が “XYZ” で始まらないかを確認します。
CS(Contains String)
CS 演算子は、左辺の文字列が右辺の部分文字列を含んでいるかを確認します。
使用例
DATA: lv_string TYPE string VALUE 'SAPERP2024'.
IF lv_string CS 'SAP'.
WRITE: '文字列には「SAP」が含まれています。'.
ENDIF.
このプログラムでは、lv_string に “SAP” が含まれているかを確認します。
NS(Not Contains String)
NS 演算子は、左辺の文字列が右辺の部分文字列を含まないかを確認します。
使用例
DATA: lv_string TYPE string VALUE 'SAP2024'.
IF lv_string NS '2025'.
WRITE: '文字列には「2025」が含まれていません。'.
ENDIF.
このプログラムでは、lv_string に “2025” が含まれていないかを確認します。
複合条件での使用例
比較演算子は、論理演算子(AND、OR)と組み合わせることで、複雑な条件式を作成できます。
使用例
DATA: lv_value TYPE i.
lv_value = 15.
IF (lv_value >= 10 AND lv_value <= 20) OR lv_value = 25.
WRITE: '値は10から20の間、または25です。'.
ENDIF.
このプログラムでは、lv_value が 10 から 20 の間にあるか、または 25 であればメッセージが表示されます。
まとめ
ABAPの比較演算子は、条件分岐やデータの検証に欠かせない強力なツールです。
基本的な比較演算子 を使って、数値や文字列、日付の等しさや大小を確認できます。
文字列用の特殊な比較演算子 を使うと、パターンマッチングや部分一致の確認が簡単に行えます。
これらの演算子を活用することで、効率的で読みやすいコードを書けるようになり、プログラムの柔軟性も向上します。