Mysql

考慮到夏令時的轉換,生成隨機時間戳

  • October 18, 2019

我想在 MariaDB 中生成隨機大數據。

其中一列是我生成的隨機時間戳,如下所示:

select (current_timestamp 
       - interval (rand() * 60 * 60 * 24 * 365 * 10) second
      ) as record_time;

由於從 3 月底開始轉向夏令時/夏令時,因此一天中沒有時間從 02:00 到 03:00。當我插入此數據時,我收到如下錯誤:

Incorrect datetime value: ‘2016-03-27 02:20:24.227322’ for column db.tab1.record_time

如何修改這部分插入腳本以在接受夏令時的同時生成正確的隨機時間戳值?

連結到有關時區的 MariaDB 資訊

SYSTEM您可以使用以下方式在時區創建時間戳:

FROM_UNIXTIME(timestamp_in_seconds) -- This is a number, not a datetime

要轉換回時間戳,您可以使用UNIX_TIMESTAMP函式。

此範例展示如何根據起點生成隨機日期時間。它只給你正確的時間戳:

select FROM_UNIXTIME(UNIX_TIMESTAMP('2016-03-27 00:30:00') + rand() * 10000);

我不確定為什麼您在 02:00 和 03:00 之間沒有時間,除非伺服器可能提前一個小時。BST 跳轉發生在 01:00,當它跳轉到 02:00 時,這些時間之間沒有小時,因此您不能插入該小時內的數據時間,因為它不存在。

看起來你的跳躍是在 02:00 到 03:00,那個小時不存在,所以它不會讓你在那個間隙中插入時間。

引用自:https://dba.stackexchange.com/questions/251113