MySQLのTIMEDIFF()関数の出力がTIME型の範囲を超えた場合どうなるか?
TIMEDIFF()関数の出力が範囲を超えた場合の動作
ご存知のとおり、MySQLのTIME型が扱える値の範囲は '-838:59:59' から '838:59:59' までです。TIMEDIFF()関数の計算結果がこの範囲を超えた場合、MySQLは引数の値に応じて '-838:59:59' または '838:59:59' のいずれかを返します。
例
mysql> Select TIMEDIFF('2017-09-01 03:05:45','2017-10-22 03:05:45')AS 'Out of Range TIME Difference';
+------------------------------+
| Out of Range TIME Difference |
+------------------------------+
| -838:59:59 |
+------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> Select TIMEDIFF('2017-10-22 04:05:45','2017-09-01 03:05:45')AS 'Out of Range TIME Difference';
+------------------------------+
| Out of Range TIME Difference |
+------------------------------+
| 838:59:59 |
+------------------------------+
1 row in set, 1 warning (0.01 sec)
上記のクエリからわかるように、2つの日時の差がTIME型の範囲を超えると、MySQLはその範囲の最大値または最小値を返します。負の差が範囲を超えた場合は最小値の「-838:59:59」、正の差が範囲を超えた場合は最大値の「838:59:59」が返される点に注目してください。また、結果が範囲外となった場合には警告(warning)も発生するため、実際のアプリケーションでは大きな日時の差を扱う際にこの挙動を考慮しておくことが重要です。
-
MySQLのZEROFILL(ゼロフィル)とは?使い方と表示幅の仕組みを実例で解説
ZEROFILL(ゼロフィル)とは?MySQLのZEROFILL属性は、カラム定義で指定された表示幅に満たない数値の左側を0(ゼロ)で埋めて表示する機能です。実際に格納される値そのものが変わるわけではなく、あくまで「表示」の際にパディングが行われる点がポイントです。例えば、カラムを INT(8) と定義した場合、表示幅は8桁になります。ここに4376という数値を格納すると、合計8桁になるように左側へゼロが埋められ、次のように表示されます。00004376テーブルの作成まず、ZEROFILLを指定したテーブルを作成してみましょう。mysql> create table DemoTable-
-
MySQLでCHAR()関数の逆の処理を行う方法|ASCII()とORD()の違いを解説
MySQLにおいて、CHAR()関数の逆の働きをするのは ASCII() 関数と ORD() 関数です。CHAR() は数値(文字コード)を文字に変換する関数ですが、ASCII() は引数の文字列の左端の文字に対応する数値(ASCIIコード)を返し、ORD() は左端の文字の文字コードを返します。 ASCII()とORD()の違い どちらも文字から数値への変換を行う点は共通していますが、以下のような違いがあります。 ASCII():シングルバイト文字専用。マルチバイト文字を渡すと警告が出て64を返します。 ORD():マルチバイト文字にも対応しており、最初のバイトの値に基づいて計算された文字