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