12

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に使用して挿入し、そのテーブルの最後のレコードのミリ秒を取得できれば...

4

5 に答える 5

27

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

試す

select sysdate(6)戻ります2013-04-16 13:47:56.273434

select sysdate(3)戻ります2013-04-16 13:47:56.273

于 2013-04-16T08:22:00.537 に答える
6

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.

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

于 2013-03-20T14:41:56.140 に答える
4

mysql 5.6 の場合

round(unix_timestamp() * 1000  + MICROSECOND(sysdate(6)) / 1000)
于 2014-11-10T09:36:11.377 に答える
0

また、次のことができます

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)
于 2019-12-10T03:50:42.737 に答える