T-SQL - ABS 関数の使い方と注意点:絶対値を取得する方法
ABS 関数の使い方と注意点:絶対値を取得する方法
T-SQL を使って数値を処理する際、値のプラスマイナスに関わらず、プラスの値として処理をしたい、という場面がたまにあります。
そんなときに便利なのが、絶対値を返してくれる ABS 関数です。
この記事では、ABS 関数の基本的な使い方や、実務で役立つ応用例、注意点などをご紹介します。
ABS 関数の基本的な使い方
SQL Server の ABS 関数は、Absolute value(絶対値) の略で、数値の絶対値(符号を除いた値)を返します。
正の値の場合は、なにもせずにそのまま返します。
負の値の場合は、符号を除いた正の値に変換して返します。
ABS 関数の構文は以下の通りです。
ABS ( [数値] )
数値のデータ型を入力引数として受け取り、負の値の場合は正の値に変換して返します。
それでは、ABS 関数を使って、数値の絶対値を取得してみましょう。
-15, 10, -123.45 の絶対値を ABS 関数に渡すと次のようになります。
SELECT ABS(-15) AS ABSValue1, ABS(10) AS ABSValue2, ABS(-123.45) AS ABSValue3;
[実行結果]
-15 と -123.45 は 15 と 123.45 に変換され、10 はそのまま 10 で返っています。
ABS 関数の実務で役立つ使い方
ABS 関数は、データの差分の絶対値を取得したい時は、閾値のチェックにも使えます。
例えば、次のような、予算 (Budget) を管理する BudgetTable があります。
この BudgetTable テーブルの Budget と Actual の差分の絶対値が 1000 以上のレコードを取得するには次のようにできます。
SELECT *, ABS(ISNULL(Budget, 0) - ISNULL(Actual, 0)) AS BudgetActualDifference FROM BudgetTable WHERE ABS(ISNULL(Budget, 0) - ISNULL(Actual, 0)) > 1000;
[実行結果]
Budget と Actual の差分の絶対値を BudgetActualDifference として取得しています。
また、ABS 関数は入力引数が NULL の時は NULL を返して、式全体が NULL になってしまうので、ISNULL を使って NULL を 0 に置き換えて計算しています。
Budget と Actual の差分の絶対値が 1000 以上のレコードが取得できていますね。
また今回のサンプルデータには入っていませんが、Budget や Actual にマイナスの値が入ってしまっているとします
そんな時は以下のようにして、ABS 関数で、データクリーニングで正の値に統一したい時にも使えます。
UPDATE BudgetTable SET Budget = ABS(Budget), Actual = ABS(Actual);
ABS 関数を使う際の注意点
ABS 関数では、入力引数が SMALLINT の時の戻り値の方は INT 型になるなど、データ型が少し変わるケースがありますのでご注意ください。
入力引数のデータ型と戻り値のデータ型は、以下の表を参考にしてください。
Input type | Return type |
---|---|
tinyint, smallint, int | int |
bigint | bigint |
float, real | float |
decimal(p, s) | decimal(38, s) |
smallmoney, money | money |
bit | float |
次のようなクエリーで、入力引数のデータ型と戻り値のデータ型が変わるのを確認できます。
DECLARE @Value1 SMALLINT = -12; SELECT @Value1 AS Value1, SQL_VARIANT_PROPERTY(@Value1, 'BaseType') AS Value1_BaseType, ABS(@Value1) AS ABSValue1, SQL_VARIANT_PROPERTY(ABS(@Value1), 'BaseType') AS ABSValue1_BaseType;
[実行結果]
SQL_VARIANT_PROPERTY 関数は、第一引数の値について、第二引数で指定したプロパティを返す関数です。
第二引数に 'BaseType' を指定するとデータ型が取得できます。
@Value1 は SMALLINT 型ですが、ABS 関数の戻り値のデータ型が INT 型になっているのがわかります。
以上、ABS 関数の基本的な使い方や、実務で役立つ応用例、注意点などをご紹介しました。