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;

[実行結果]

ABS 関数の使い方と注意点 1

-15 と -123.45 は 15 と 123.45 に変換され、10 はそのまま 10 で返っています。


ABS 関数の実務で役立つ使い方

ABS 関数は、データの差分の絶対値を取得したい時は、閾値のチェックにも使えます。

例えば、次のような、予算 (Budget) を管理する BudgetTable があります。

ABS 関数の使い方と注意点 2


この 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;

[実行結果]

ABS 関数の使い方と注意点 3

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 typeReturn type
tinyint, smallint, intint
bigintbigint
float, realfloat
decimal(p, s)decimal(38, s)
smallmoney, moneymoney
bitfloat

次のようなクエリーで、入力引数のデータ型と戻り値のデータ型が変わるのを確認できます。

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;

[実行結果]

ABS 関数の使い方と注意点 4

SQL_VARIANT_PROPERTY 関数は、第一引数の値について、第二引数で指定したプロパティを返す関数です。

第二引数に 'BaseType' を指定するとデータ型が取得できます。

@Value1 は SMALLINT 型ですが、ABS 関数の戻り値のデータ型が INT 型になっているのがわかります。


以上、ABS 関数の基本的な使い方や、実務で役立つ応用例、注意点などをご紹介しました。

© 2010-2025 SQL Server 入門