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引数に負の値を指定すると、その絶対値の分だけ小数点前の桁が処理対象となり、指定された位置で四捨五入された結果が返されます。金額や数量を百の位・千の位単位で丸めたい場合などに便利な機能です。
-
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); +-------------
-
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) |+-----------------------