web-dev-qa-db-ja.com

MySQLの現在の時刻からマイクロ秒またはミリ秒を取得する方法は?

MySQLで最初のストアド関数を作成しようとしています。この関数では、次のように3マイクロ秒の数字で現在の日付と時刻のタイムスタンプを返します。YYYYMMDDHHMMSSZZZ

データベースでこの番号を使用して、オフラインでレコードの一意のキーを作成し、システムが異なるオフラインサーバーのデータベースをマージするときにそれらがクラッシュしないようにします。

だから私が最初に試したのはSELECT CAST(MICROSECOND(NOW()) AS CHAR(3));でした

ただし、0を返します。

SELECT CAST(MICROSECOND('2009-12-31 23:59:59.001210') AS CHAR(3));を試してみると

必要に応じて121を返します。

では、MySQLに現在のマイクロ秒を知りたいことを伝える方法は?


編集:

このことを考慮:

CREATE FUNCTION CHAVE (pTable VARCHAR(32)) RETURNS CHAR(20)
BEGIN
    DECLARE vSigla CHAR(3);
    DECLARE vDateTime CHAR(14);
    DECLARE vMilli CHAR(3);
    DECLARE vKey CHAR(20);
    SET vSigla = (SELECT SIGLA FROM TABLELIST WHERE NOME = pTable);
    SET vDateTime = (SELECT CAST(LEFT(UTC_TIMESTAMP()+0, 14) AS CHAR(14)));
    SET vMilli = LPAD(FLOOR(Rand() * 1000), 3, '0');
    SET vKey = CONCAT(vSigla, vDateTime, vMilli);
    RETURN vKey;
END;

結果として:

INSERT INTO TABLEX (dateID, name) VALUES (CHAVE('TABLEX'), 'EASI');

CHAVE( 'TABLEX')から:

KEY20130320151159666

666は乱数になりますが、ただし、現在の時刻の実際のミリ秒数であるといいのですがなので、重複するキーはありません。


SHOW COLUMNS FROM @TableName WHERE FIELD_NAME LIKE '%_ID' LIMIT 1そしてそれを非動的SELECTに挿入して、そのテーブルの最後のレコードのミリ秒を取得します。

MySQL 5.6は sysdate 関数でミリ秒の精度をサポートしています。

試す

select sysdate(6)は_2013-04-16 13:47:56.273434_を返します

そして

select sysdate(3)は_2013-04-16 13:47:56.273_を返します

26
ali

MySQLの内容を見てください( http://dev.mysql.com/doc/refman/5.1/en/fractional-seconds.html ):

However, when MySQL stores a value into a column of any temporal data type, it discards any fractional part and does not store it.

したがって、日付値としてではなく、単純な浮動小数点値として保存する必要があります。

5
artahian

Mysql5.6の場合

round(unix_timestamp() * 1000  + MICROSECOND(sysdate(6)) / 1000)
4
javamonk

また、あなたはすることができます

mysql> select now(3) as millisecond, now(6) as microsecond, round(1000 * unix_timestamp(now(3))) elapsed_millisecond, round(unix_timestamp() * 1000  + MICROSECOND(now(6)) / 1000) elapsed_microsecond;
+-------------------------+----------------------------+---------------------+---------------------+
| millisecond             | microsecond                | elapsed_millisecond | elapsed_microsecond |
+-------------------------+----------------------------+---------------------+---------------------+
| 2019-12-10 11:49:43.568 | 2019-12-10 11:49:43.568767 |       1575949783568 |       1575949783569 |
+-------------------------+----------------------------+---------------------+---------------------+
1 row in set (0.01 sec)
0