MySQL
秒以下の精度を持つ時間
サーチ…
備考
分数秒のデータ型を持つカラムを宣言するには、MySQLバージョン5.6.4以降が必要です。
たとえば、 DATETIME(3)
はタイムスタンプでミリ秒の解像度を、 TIMESTAMP(6)
は* nixスタイルのタイムスタンプでマイクロ秒の解像度をDATETIME(3)
ます。
これを読んでください: http : //dev.mysql.com/doc/refman/5.7/en/fractional-seconds.html
NOW(3)
はMySQLサーバーのオペレーティングシステムから現在の時刻をミリ秒精度で表示します。
(* 0.001のようなMySQLの内部分数計算は常にIEEE754倍精度浮動小数点として扱われるので、Sunが白い矮星になる前に精度を失うことはありません)。
ミリ秒の精度で現在の時刻を取得する
SELECT NOW(3)
トリックを行う。
Javascriptのタイムスタンプのような形で現在の時刻を取得します。
Javascriptタイムスタンプは、由緒正しいUNIXのtime_t
データ型に基づいており、 1970-01-01 00:00:00
UTC以降のミリ秒数を示し1970-01-01 00:00:00
。
この式は現在の時刻をJavascriptのタイムスタンプ整数として取得します。 (これは、現在のtime_zone設定に関係なく正しく実行されます)。
ROUND(UNIX_TIMESTAMP(NOW(3)) * 1000.0, 0)
TIMESTAMP
値が列に格納されている場合は、UNIX_TIMESTAMP()関数を使用して整数Javascriptタイムスタンプとして取得できます。
SELECT ROUND(UNIX_TIMESTAMP(column) * 1000.0, 0)
列にDATETIME
列が含まれていて、その列をJavascriptタイムスタンプとして取得すると、それらのタイムスタンプは保存されているタイムゾーンのタイムゾーンオフセットによってオフセットされます。
サブ秒の時間を格納する列を持つテーブルを作成します。
CREATE TABLE times (
dt DATETIME(3),
ts TIMESTAMP(3)
);
ミリ秒精度の日付/時刻フィールドを持つテーブルを作成します。
INSERT INTO times VALUES (NOW(3), NOW(3));
ミリ秒精度のNOW()
値を含む行をテーブルに挿入します。
INSERT INTO times VALUES ('2015-01-01 16:34:00.123','2015-01-01 16:34:00.128');
特定のミリ秒の精度値を挿入します。
この関数を使用して高精度の時間値を挿入する場合は、 NOW()
ではなくNOW(3)
使用する必要があることに注意してください。
ミリ秒精度の日付/時刻値をテキストに変換します。
%f
は、 DATE_FORMAT()関数の分数精度書式指定子です。
SELECT DATE_FORMAT(NOW(3), '%Y-%m-%d %H:%i:%s.%f')
分数マイクロ秒で2016-11-19 09:52:53.248000
ような値を表示します。 NOW(3)
を使用したため、端数の最後の3桁は0です。
JavascriptタイムスタンプをTIMESTAMP列に格納する
Javascriptのタイムスタンプ値( 1478960868932
など)がある場合は、その値をMySQLの分数時間の値に変換できます。
FROM_UNIXTIME(1478960868932 * 0.001)
この種の表現を使用して、JavascriptタイムスタンプをMySQLテーブルに格納するのは簡単です。これを行う:
INSERT INTO table (col) VALUES (FROM_UNIXTIME(1478960868932 * 0.001))
(明らかに、他の列を挿入する必要があります)。