搜尋

首頁  >  問答  >  主體

mysql 時間類型 欄位(精確到時分秒) 怎麼比較?

我需要根據create_time欄位來篩選數據,現在sql 語句如下:

SELECT    * FROM    `sbhf_alarm` sa WHERE
unix_timestamp(sa.create_time) BETWEEN unix_timestamp('2016-05-25 14:07:56')
AND unix_timestamp('2017-05-25 14:07:56')

#但是,我發現這種方法由個bug, 就是,當上限時間(上圖箭頭)過大的時候,會報錯。如下圖:


原因是,unix_timestamp函數,將時間轉換為秒,時間不能太大。

問題:是否還有其他更好的方法來篩選時間?
這種問題一般是怎麼解決的?請大神賜教,感激不盡…

阿神阿神2756 天前908

全部回覆(2)我來回復

  • 巴扎黑

    巴扎黑2017-06-06 09:54:27

    UNIX_TIMESTAMP回傳的是INTEGER而不是BIGINT,所以不能超過2038年(又說2106年)。

    為什麼

    create_time BETWEEN '2016-05-25 14:07:56 AND '2017-05-25 14:07:56' 呢?

    另外,如果追求計算的便捷性,建議時間列類型設為BIGINT,存放以毫秒為單位的Unix時間戳,這樣就不會有2038問題了。

    回覆
    0
  • 世界只因有你

    世界只因有你2017-06-06 09:54:27

    create_time BETWEEN '2016-05-25 14:07:56' AND '2017-05-25 14:07:56'

    如果加上毫秒的話,注意用冒號:,

    create_time BETWEEN '2016-05-25 14:07:56:000' AND '2017-05-25 14:07:56:000'

    回覆
    0
  • 取消回覆