SAP HANA SQL関数:種類と例
⚡ スマートサマリー
SAP HANA SQL関数は、データをアプリケーション層に移動することなく、クエリ内の値を変換します。データ型変換、日付と時刻、全文検索、数値、文字列、ウィンドウ、およびその他の操作を網羅する7つのカテゴリがあります。

SAP HANA SQL関数
SAP HANAは以下の機能を提供します SAP HANA機能 -
- データ型変換関数 – データ型変換関数は、あるデータ型を別のデータ型に変換するために使用されます。 以下はデータ型変換関数のリストです (CAST、TO_ALPHANUM、TO_BIGINT、TO_BINARY など)。
- 日付時刻関数 – 日付/時刻関数は、日付/時刻を別の形式に変換するために使用されます。例:ADD_DAYS、ADD_MONTHS、ADD_SECONDなど。
- フルテキスト関数 – 全文検索機能はテキスト検索に使用されます。例:SCOREなど。
- 数値関数 – 数値関数は、数値または数字を含む文字列を入力として受け取り、数値を返します。例:ABS、ROUND、POWERなど。
- 文字列関数 – 文字列関数は、文字列を入力として受け取り、処理を行い、関数に応じて値を返します。(例:ASCII、CHAR、CONCATなど)
- ウィンドウ関数 – ウィンドウ関数を使用すると、クエリの結果セットをウィンドウパーティションと呼ばれる行のグループに分割できます。例:RANK()、DENSE_RANK()、ROW_NUMBER()など。
- その他機能- 他にも、さまざまなジョブに使用される関数がいくつかあります。例: CONVERT_CURRENCY、CURRENT_SCHEMA など。
上記の関数はすべてデータベースエンジン内で評価されるため、ロジックを関数に組み込む方が、行を取得してアプリケーションで処理するよりもほぼ常に高速です。以下の例では、実際のデータに触れることなく式をテストするためだけに存在する、単一行のシステムテーブルであるDUMMYテーブルを使用しています。
スカラー関数、集計関数、ウィンドウ関数
例を挙げる前に、クエリにおける関数の動作を決定する重要な要素が1つあります。それは、入力される行数と出力される行数です。
| カテゴリー | 入力行数:出力行数 | グループ化が必要ですか? | 例 |
|---|---|---|---|
| スカラー | 1列から1列へ | いいえ | アッパー、ラウンド、今日まで、キャスト |
| 集計 | 1行に多数の行 | はい、ただしセット全体が1つのグループである場合は除きます。 | 和、 AVG、カウント、最小値、最大値 |
| ウィンドウ | 多数の行から多数の行へ | いいえ、代わりにOVERを使用します | ランク、密ランク、行番号、ラグ |
| 表 | 結果セットを返します | FROM句で使用されます | シリーズ生成日 |
実際的な結果として、集計関数は詳細を省略するのに対し、ウィンドウ関数は詳細を保持します。各従業員とその所属部署の平均値を求めるにはウィンドウ関数が必要です。なぜなら、GROUP BY句では個々の行が完全に削除されてしまうからです。
コマンドと SAP HANA関数の例
以下のステートメントは、SQLコンソールに直接貼り付けることができます。それぞれが、上記のリストから1つのカテゴリを示しています。
1) 文字列関数。 これらは文字入力を受け取り、派生値を返します。
SELECT UPPER('sap hana') AS UPPER_TEXT, LENGTH('SAP HANA') AS TEXT_LENGTH, CONCAT('SAP ', 'HANA') AS JOINED, SUBSTRING('SAP HANA', 5, 4) AS PART, REPLACE('SAP HANA', 'HANA', 'S/4') AS SWAPPED, TRIM(' padded ') AS CLEANED FROM DUMMY;
2) 数値関数 丸め動作はテストする価値があります。なぜなら、ROUND 関数は市販の丸め機能を使用するのに対し、FLOOR 関数と CEIL 関数は常に一方向に丸められるからです。
SELECT ABS(-45.7) AS ABSOLUTE_VALUE, ROUND(123.4567, 2) AS ROUNDED, FLOOR(9.9) AS ROUNDED_DOWN, CEIL(9.1) AS ROUNDED_UP, POWER(2, 10) AS RAISED, MOD(17, 5) AS REMAINDER FROM DUMMY;
3) 日付と時刻の機能。 これらは、期間報告において最も頻繁に必要とされるものです。
SELECT CURRENT_DATE AS TODAY, ADD_DAYS(CURRENT_DATE, 30) AS IN_30_DAYS, ADD_MONTHS(CURRENT_DATE, -1) AS LAST_MONTH, DAYS_BETWEEN('2026-01-01', CURRENT_DATE) AS ELAPSED, LAST_DAY(CURRENT_DATE) AS MONTH_END, WEEKDAY(CURRENT_DATE) AS DAY_INDEX FROM DUMMY;
4) 変換関数。 明示的な型変換は、WHERE句の処理速度を低下させる暗黙的な型強制を防ぎます。
SELECT CAST('1234' AS INTEGER) AS AS_NUMBER, TO_VARCHAR(CURRENT_DATE, 'DD.MM.YYYY') AS AS_TEXT, TO_DECIMAL(1234.5678, 10, 2) AS AS_DECIMAL FROM DUMMY;
各ターゲット型の型動作と制限については、以下で説明します。 SAP HANAデータ型.
ウィンドウ関数について解説
ウィンドウ関数は、現在の行に関連する一連の行に対して、それらを統合することなく計算を実行します。OVER句はそのセットを定義し、2つのオプション部分があります。PARTITION BYはデータをグループに分割し、ORDER BYは各グループ内の順序を固定します。
SELECT DEPARTMENT, EMP_NAME, SALARY, ROW_NUMBER() OVER (PARTITION BY DEPARTMENT ORDER BY SALARY DESC) AS ROW_NUM, RANK() OVER (PARTITION BY DEPARTMENT ORDER BY SALARY DESC) AS RANKING, DENSE_RANK() OVER (PARTITION BY DEPARTMENT ORDER BY SALARY DESC) AS DENSE_RANKING, SUM(SALARY) OVER (PARTITION BY DEPARTMENT) AS DEPT_TOTAL FROM DHK_SCHEMA.EMPLOYEE;
3つのランキング関数は、値が同点の場合にのみ異なる。
- 行番号 同点になることはありません。給与が全く同じ2人でも、1位と2位がそれぞれ恣意的に選ばれます。
- RANK 同数の行には同じ番号を割り当て、その後1行飛ばします。1の行が2つある場合は、3が続きます。
- DENSE_RANK 同数の行には同じ番号が付けられ、番号は飛ばされません。番号が1の行が2つある場合は、その後に2が続きます。
重複排除には ROW_NUMBER を、競技形式の順位付けには RANK を、シーケンスを途切れさせたくない場合は DENSE_RANK を使用します。これらの関数と併用される比較および論理記号については、 SAP HANAオペレーター、およびステートメント構造 SAP HANASQL について.
