SQL道場 算術関数 ABS関数

SQLで絶対値を返すABS関数について記載しています。

対応データベースSQL Server MySQL Oracle PostgreSQL DB2 SQLite Access

ABS関数の文法

SELECT ABS(数値) FROM テーブル
引数数値数値型(任意の数値)
返値数値型 絶対値

ABS関数は指定された数値の絶対値を戻します。NULLをセットした場合、NULLが返されます。

絶対値とは、0からの距離を表す値で、正の数の絶対値はそのままですが、負の数の絶対値は負の符号(マイナス)をとった値になります。

SQLServer仕様

数値の絶対値がデータ型の最大値を超えている場合は、オーバーフローエラーが発生します。たとえば、int データ型の値の範囲が「 -2,147,483,648」 から 「2,147,483,647」で、「-2,147,483,648」を絶対値にすると正数範囲の上限を超えるためオーバーフローエラーになります。

実行例

MySQLの実行例

/* 正の数を引数にセットした場合 */
SELECT abs(100) as abs_value;

/* 負の数を引数にセットした場合 */
SELECT abs(-500) as abs_value;

/* 0の数を引数にセットした場合 */
SELECT abs(-0) as abs_value;

/* 小数点を引数にセットした場合 */
SELECT abs(-500.22) as abs_value;

/* 文字列を引数にセットした場合 */
SELECT abs('t') as abs_value;

正の数を引数にセットした場合の実行結果

正の数を引数にセットした場合の実行結果(MySQL)画像

負の数を引数にセットした場合の実行結果

負の数を引数にセットした場合の実行結果(MySQL)画像

負の数を引数にセットした場合の実行結果

負の数を引数にセットした場合の実行結果(MySQL)画像

小数点を引数にセットした場合の実行結果

負の数を引数にセットした場合の実行結果(MySQL)画像

文字列を引数にセットした場合 の実行結果

負の数を引数にセットした場合の実行結果(MySQL)画像

SQLServerの実行例

/* 正の数を引数にセットした場合 */
SELECT abs(100) as abs_value;

/* 負の数を引数にセットした場合 */
SELECT abs(-500) as abs_value;

/* 0の数を引数にセットした場合 */
SELECT abs(-0) as abs_value;

/* 小数点を引数にセットした場合 */
SELECT abs(-500.22) as abs_value;

/* 文字列を引数にセットした場合 */
SELECT abs('t') as abs_value;
負の数を引数にセットした場合の実行結果(SQLServer)画像

ABS関数に文字列をセットした場合、MySQLとSQLServerの挙動の違い。MySQLの場合は、文字列を0で返しますが、SQLServerの場合は、「データ型 varchar を float に変換中にエラーが発生しました。」というメッセージを表示してエラーになります。

ABS関数エラー