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;
正の数を引数にセットした場合の実行結果

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

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

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

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

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;

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