MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのROUND()関数:第2引数に負の値を指定した場合の出力への影響

MySQLのROUND()関数における負の第2引数の役割

MySQLのROUND()関数では、第2引数に負の値を指定すると、小数点より前(整数部分)の桁が削除され、その位置で四捨五入されます。削除される桁数は、負の第2引数の絶対値によって決まります。

以下の例では、第2引数に指定する負の値によって、ROUND()関数の出力がどのように変化するかを具体的に示しています。

例1:ROUND(1789.456, -1) の場合

mysql> Select ROUND(1789.456,-1);
+--------------------+
| ROUND(1789.456,-1) |
+--------------------+
|                1790 |
+--------------------+
1 row in set (0.00 sec)

このクエリは 1790 を返します。-1 を指定すると、小数点前の最初の桁(この場合は「9」)が削除対象となります。「9」は5より大きいため、その前の桁「8」が繰り上げられて「9」になるのです。

例2:ROUND(1789.456, -2) の場合

mysql> Select ROUND(1789.456,-2);
+--------------------+
| ROUND(1789.456,-2) |
+--------------------+
|                1800 |
+--------------------+
1 row in set (0.00 sec)

このクエリは 1800 を返します。-2 を指定すると、小数点前の2桁目(この場合は「8」)が削除対象となります。「8」は5より大きいため、その前の桁「7」が繰り上げられて「8」になります。

例3:ROUND(1789.456, -3) の場合

mysql> Select ROUND(1789.456,-3);
+--------------------+
| ROUND(1789.456,-3) |
+--------------------+
|                2000 |
+--------------------+
1 row in set (0.00 sec)

このクエリは 2000 を返します。-3 を指定すると、小数点前の3桁目(この場合は「7」)が削除対象となります。「7」は5より大きいため、その前の桁「1」が繰り上げられて「2」になります。

例4:ROUND(1789.456, -4) の場合

mysql> Select ROUND(1789.456,-4);
+--------------------+
| ROUND(1789.456,-4) |
+--------------------+
|                   0 |
+--------------------+
1 row in set (0.00 sec)

このクエリは 0 を返します。これは、小数点前の桁数が合計4桁であり、第2引数の値が -4 つまり整数部分すべてが削除対象となるためです。

まとめ

このように、ROUND()関数の第2引数に負の値を指定すると、その絶対値の分だけ小数点前の桁が処理対象となり、指定された位置で四捨五入された結果が返されます。金額や数量を百の位・千の位単位で丸めたい場合などに便利な機能です。

  1. MySQL INTERVAL()関数:引数リストに第1引数より大きい数値がない場合に返される値とは?

    INTERVAL()関数の戻り値の挙動MySQLのINTERVAL()関数は、引数リストの中に第1引数より大きい数値がひとつも存在しない場合、「引数リスト内の最後の数値のインデックス番号+1」を返します。言い換えれば、リストの末尾のインデックス番号に1を加えた値が戻り値となるのです。具体的な動作例以下の例では、第1引数として「50」を指定し、比較対象の数値リストとして「20、32、38、40」を渡しています。このリストには50より大きい数値が存在しないため、関数は「4」を返します。mysql> Select INTERVAL(50,20,32,38,40); +-------------

  2. MySQLのCONCAT_WS()関数で文字列連結時にNULL値を渡すと、出力はどうなる?

    CONCAT_WS()関数とNULL値の関係MySQLのCONCAT_WS()関数がNULLを返すのは、第1引数(区切り文字)がNULLである場合のみです。それ以外の場合は、NULLが含まれていても連結処理が実行されます。まず、区切り文字にNULLを指定した例を見てみましょう。mysql> Select CONCAT_ws(NULL,Tutorial,Point,.com);+-------------------------------------------+| CONCAT_ws(NULL,Tutorial,Point,.com) |+-----------------------