MySQL TRUNCATE()関数で第2引数に負の値を指定すると出力はどう変わるのか?
TRUNCATE()関数の第2引数に負の値を指定した場合の動作
MySQLのTRUNCATE()関数では、第2引数に負の値を指定すると、小数点より前(整数部分)の桁が四捨五入されることなくそのまま切り捨てられます。削除される桁数は、第2引数に指定した負の値の絶対値によって決まります。
以下の例では、第2引数の負の値の大きさに応じて、TRUNCATE()関数の出力がどのように変化するかを順に確認していきます。
第2引数に-1を指定した場合
mysql> Select TRUNCATE(1789.456,-1);
+-----------------------+
| TRUNCATE(1789.456,-1) |
+-----------------------+
| 1780 |
+-----------------------+
1 row in set (0.00 sec)
上記のクエリは 1780 を返します。これは、第2引数が -1 のため、小数点より前の下1桁(一の位)が切り捨てられた結果です。
第2引数に-2を指定した場合
mysql> Select TRUNCATE(1789.456,-2);
+-----------------------+
| TRUNCATE(1789.456,-2) |
+-----------------------+
| 1700 |
+-----------------------+
1 row in set (0.00 sec)
上記のクエリは 1700 を返します。第2引数が -2 のため、小数点より前の下2桁が切り捨てられています。
第2引数に-3を指定した場合
mysql> Select TRUNCATE(1789.456,-3);
+-----------------------+
| TRUNCATE(1789.456,-3) |
+-----------------------+
| 1000 |
+-----------------------+
1 row in set (0.00 sec)
上記のクエリは 1000 を返します。第2引数が -3 のため、小数点より前の下3桁が切り捨てられた結果です。
第2引数に-4を指定した場合
mysql> Select TRUNCATE(1789.456,-4);
+-----------------------+
| TRUNCATE(1789.456,-4) |
+-----------------------+
| 0 |
+-----------------------+
1 row in set (0.00 sec)
上記のクエリは 0 を返します。この数値の整数部分は合計4桁であり、第2引数の値が -4 と一致するため、すべての桁が切り捨てられたのです。
まとめ:第2引数の値と結果の対応表
| 第2引数の値 | TRUNCATE(1789.456, 引数) の結果 |
|---|---|
| -1 | 1780 |
| -2 | 1700 |
| -3 | 1000 |
| -4 | 0 |
このように、負の第2引数の絶対値が大きくなるほど、多くの桁が切り捨てられます。なお、TRUNCATE()はあくまで切り捨てを行う関数であるため、ROUND()関数のような四捨五入は一切行われない点に注意してください。
-
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) |+-----------------------